Not logged in
Hex Artifact Content

Artifact b6da867b630ef33b702f514aecb6ea564e2ff867:

  • File scripts/cplusplusproject.tcl — part of check-in [56a4cb721e] at 2005-01-12 09:44:34 on branch trunk — *** empty log message *** (user: ramsan size: 59206)

0000: 0a 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  ...namespace eva
0010: 6c 20 63 70 72 6f 6a 65 63 74 20 7b 0a 20 20 20  l cproject {.   
0020: 20 76 61 72 69 61 62 6c 65 20 70 72 6f 6a 65 63   variable projec
0030: 74 20 22 22 0a 20 20 20 20 76 61 72 69 61 62 6c  t "".    variabl
0040: 65 20 67 72 6f 75 70 20 41 6c 6c 0a 20 20 20 20  e group All.    
0050: 76 61 72 69 61 62 6c 65 20 67 72 6f 75 70 62 65  variable groupbe
0060: 66 6f 72 65 20 22 22 0a 20 20 20 20 76 61 72 69  fore "".    vari
0070: 61 62 6c 65 20 67 72 6f 75 70 73 20 41 6c 6c 0a  able groups All.
0080: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 69 6e      variable lin
0090: 6b 73 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ks.    variable 
00a0: 73 63 72 69 70 74 74 61 62 73 0a 20 20 20 20 76  scripttabs.    v
00b0: 61 72 69 61 62 6c 65 20 64 65 62 75 67 72 65 6c  ariable debugrel
00c0: 65 61 73 65 62 65 66 6f 72 65 20 22 22 0a 20 20  easebefore "".  
00d0: 20 20 76 61 72 69 61 62 6c 65 20 64 65 62 75 67    variable debug
00e0: 72 65 6c 65 61 73 65 20 64 65 62 75 67 0a 20 20  release debug.  
00f0: 20 20 76 61 72 69 61 62 6c 65 20 66 69 6c 65 73    variable files
0100: 20 22 22 0a 0a 20 20 20 20 76 61 72 69 61 62 6c   ""..    variabl
0110: 65 20 74 68 69 73 64 61 74 61 43 0a 20 20 20 20  e thisdataC.    
0120: 76 61 72 69 61 62 6c 65 20 64 61 74 61 43 0a 20  variable dataC. 
0130: 20 20 20 76 61 72 69 61 62 6c 65 20 74 68 69 73     variable this
0140: 64 61 74 61 4c 0a 20 20 20 20 76 61 72 69 61 62  dataL.    variab
0150: 6c 65 20 64 61 74 61 4c 0a 20 20 20 20 76 61 72  le dataL.    var
0160: 69 61 62 6c 65 20 74 68 69 73 64 61 74 61 45 0a  iable thisdataE.
0170: 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74      variable dat
0180: 61 45 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65  aE..    variable
0190: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 73 74 61 74   compilationstat
01a0: 75 73 0a 7d 0a 0a 23 23 23 23 23 23 23 23 23 23  us.}..##########
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 0a 23 20 20 20 70 72 6f 6a 65  ######.#   proje
0200: 63 74 20 63 72 65 61 74 69 6f 6e 2f 65 64 69 74  ct creation/edit
0210: 69 6f 6e 0a 23 23 23 23 23 23 23 23 23 23 23 23  ion.############
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 0a 0a 70 72 6f 63 20 63 70 72 6f 6a  ####..proc cproj
0270: 65 63 74 3a 3a 49 6e 69 74 20 7b 20 77 20 7d 20  ect::Init { w } 
0280: 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 70  {.    variable p
0290: 72 6f 6a 65 63 74 0a 0a 20 20 20 20 74 72 61 63  roject..    trac
02a0: 65 20 76 61 72 20 3a 3a 63 70 72 6f 6a 65 63 74  e var ::cproject
02b0: 3a 3a 67 72 6f 75 70 20 77 20 22 63 70 72 6f 6a  ::group w "cproj
02c0: 65 63 74 3a 3a 53 65 74 47 72 6f 75 70 41 63 74  ect::SetGroupAct
02d0: 69 76 65 3b 23 22 0a 20 20 20 20 74 72 61 63 65  ive;#".    trace
02e0: 20 76 61 72 20 3a 3a 63 70 72 6f 6a 65 63 74 3a   var ::cproject:
02f0: 3a 64 65 62 75 67 72 65 6c 65 61 73 65 20 77 20  :debugrelease w 
0300: 22 63 70 72 6f 6a 65 63 74 3a 3a 53 65 74 44 65  "cproject::SetDe
0310: 62 75 67 52 65 6c 65 61 73 65 41 63 74 69 76 65  bugReleaseActive
0320: 3b 23 22 0a 0a 20 20 20 20 69 66 20 7b 20 5b 69  ;#"..    if { [i
0330: 6e 66 6f 20 65 78 69 73 74 73 20 52 61 6d 44 65  nfo exists RamDe
0340: 62 75 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28  bugger::options(
0350: 72 65 63 65 6e 74 70 72 6f 6a 65 63 74 73 29 5d  recentprojects)]
0360: 20 26 26 20 5c 0a 09 20 20 20 20 5b 6c 6c 65 6e   && \..    [llen
0370: 67 74 68 20 24 52 61 6d 44 65 62 75 67 67 65 72  gth $RamDebugger
0380: 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65 6e 74  ::options(recent
0390: 70 72 6f 6a 65 63 74 73 29 5d 20 3e 20 30 20 7d  projects)] > 0 }
03a0: 20 7b 0a 09 73 65 74 20 70 72 6f 6a 65 63 74 20   {..set project 
03b0: 5b 6c 69 6e 64 65 78 20 24 52 61 6d 44 65 62 75  [lindex $RamDebu
03c0: 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65  gger::options(re
03d0: 63 65 6e 74 70 72 6f 6a 65 63 74 73 29 20 30 5d  centprojects) 0]
03e0: 0a 09 63 61 74 63 68 20 7b 20 4f 70 65 6e 50 72  ..catch { OpenPr
03f0: 6f 6a 65 63 74 20 24 77 20 30 20 7d 0a 20 20 20  oject $w 0 }.   
0400: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a   }.}..proc cproj
0410: 65 63 74 3a 3a 73 79 6e 63 74 6f 55 49 20 7b 7d  ect::synctoUI {}
0420: 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   {.    variable 
0430: 74 68 69 73 64 61 74 61 43 0a 20 20 20 20 76 61  thisdataC.    va
0440: 72 69 61 62 6c 65 20 64 61 74 61 43 0a 20 20 20  riable dataC.   
0450: 20 76 61 72 69 61 62 6c 65 20 74 68 69 73 64 61   variable thisda
0460: 74 61 4c 0a 20 20 20 20 76 61 72 69 61 62 6c 65  taL.    variable
0470: 20 64 61 74 61 4c 0a 20 20 20 20 76 61 72 69 61   dataL.    varia
0480: 62 6c 65 20 74 68 69 73 64 61 74 61 45 0a 20 20  ble thisdataE.  
0490: 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 45    variable dataE
04a0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 68  .    variable th
04b0: 69 73 64 61 74 61 53 0a 20 20 20 20 76 61 72 69  isdataS.    vari
04c0: 61 62 6c 65 20 64 61 74 61 53 0a 20 20 20 20 76  able dataS.    v
04d0: 61 72 69 61 62 6c 65 20 67 72 6f 75 70 0a 20 20  ariable group.  
04e0: 20 20 76 61 72 69 61 62 6c 65 20 64 65 62 75 67    variable debug
04f0: 72 65 6c 65 61 73 65 0a 0a 20 20 20 20 66 6f 72  release..    for
0500: 65 61 63 68 20 69 20 5b 61 72 72 61 79 20 6e 61  each i [array na
0510: 6d 65 73 20 64 61 74 61 43 20 24 67 72 6f 75 70  mes dataC $group
0520: 2c 24 64 65 62 75 67 72 65 6c 65 61 73 65 2c 2a  ,$debugrelease,*
0530: 5d 20 7b 0a 09 72 65 67 65 78 70 20 7b 5e 5b 5e  ] {..regexp {^[^
0540: 2c 5d 2b 2c 5b 5e 2c 5d 2b 2c 28 2e 2a 29 7d 20  ,]+,[^,]+,(.*)} 
0550: 24 69 20 7b 7d 20 70 72 6f 70 0a 09 73 65 74 20  $i {} prop..set 
0560: 74 68 69 73 64 61 74 61 43 28 24 70 72 6f 70 29  thisdataC($prop)
0570: 20 24 64 61 74 61 43 28 24 69 29 0a 20 20 20 20   $dataC($i).    
0580: 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  }.    foreach i 
0590: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 64 61 74  [array names dat
05a0: 61 4c 20 24 64 65 62 75 67 72 65 6c 65 61 73 65  aL $debugrelease
05b0: 2c 2a 5d 20 7b 0a 09 72 65 67 65 78 70 20 7b 5e  ,*] {..regexp {^
05c0: 5b 5e 2c 5d 2b 2c 28 2e 2a 29 7d 20 24 69 20 7b  [^,]+,(.*)} $i {
05d0: 7d 20 70 72 6f 70 0a 09 73 65 74 20 74 68 69 73  } prop..set this
05e0: 64 61 74 61 4c 28 24 70 72 6f 70 29 20 24 64 61  dataL($prop) $da
05f0: 74 61 4c 28 24 69 29 0a 20 20 20 20 7d 0a 20 20  taL($i).    }.  
0600: 20 20 66 6f 72 65 61 63 68 20 69 20 5b 61 72 72    foreach i [arr
0610: 61 79 20 6e 61 6d 65 73 20 64 61 74 61 53 20 24  ay names dataS $
0620: 64 65 62 75 67 72 65 6c 65 61 73 65 2c 2a 5d 20  debugrelease,*] 
0630: 7b 0a 09 72 65 67 65 78 70 20 7b 5e 5b 5e 2c 5d  {..regexp {^[^,]
0640: 2b 2c 28 2e 2a 29 7d 20 24 69 20 7b 7d 20 70 72  +,(.*)} $i {} pr
0650: 6f 70 0a 09 73 65 74 20 74 68 69 73 64 61 74 61  op..set thisdata
0660: 53 28 24 70 72 6f 70 29 20 24 64 61 74 61 53 28  S($prop) $dataS(
0670: 24 69 29 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  $i).    }.    fo
0680: 72 65 61 63 68 20 69 20 5b 61 72 72 61 79 20 6e  reach i [array n
0690: 61 6d 65 73 20 64 61 74 61 45 20 24 64 65 62 75  ames dataE $debu
06a0: 67 72 65 6c 65 61 73 65 2c 2a 5d 20 7b 0a 09 72  grelease,*] {..r
06b0: 65 67 65 78 70 20 7b 5e 5b 5e 2c 5d 2b 2c 28 2e  egexp {^[^,]+,(.
06c0: 2a 29 7d 20 24 69 20 7b 7d 20 70 72 6f 70 0a 09  *)} $i {} prop..
06d0: 73 65 74 20 74 68 69 73 64 61 74 61 45 28 24 70  set thisdataE($p
06e0: 72 6f 70 29 20 24 64 61 74 61 45 28 24 69 29 0a  rop) $dataE($i).
06f0: 20 20 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 63 70      }.}..proc cp
0700: 72 6f 6a 65 63 74 3a 3a 73 79 6e 63 66 72 6f 6d  roject::syncfrom
0710: 55 49 20 7b 7d 20 7b 0a 20 20 20 20 76 61 72 69  UI {} {.    vari
0720: 61 62 6c 65 20 74 68 69 73 64 61 74 61 43 0a 20  able thisdataC. 
0730: 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61     variable data
0740: 43 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 74  C.    variable t
0750: 68 69 73 64 61 74 61 4c 0a 20 20 20 20 76 61 72  hisdataL.    var
0760: 69 61 62 6c 65 20 64 61 74 61 4c 0a 20 20 20 20  iable dataL.    
0770: 76 61 72 69 61 62 6c 65 20 74 68 69 73 64 61 74  variable thisdat
0780: 61 53 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  aS.    variable 
0790: 64 61 74 61 53 0a 20 20 20 20 76 61 72 69 61 62  dataS.    variab
07a0: 6c 65 20 74 68 69 73 64 61 74 61 45 0a 20 20 20  le thisdataE.   
07b0: 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 45 0a   variable dataE.
07c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 67 72 6f      variable gro
07d0: 75 70 62 65 66 6f 72 65 0a 20 20 20 20 76 61 72  upbefore.    var
07e0: 69 61 62 6c 65 20 64 65 62 75 67 72 65 6c 65 61  iable debugrelea
07f0: 73 65 62 65 66 6f 72 65 0a 0a 20 20 20 20 69 66  sebefore..    if
0800: 20 7b 20 24 64 65 62 75 67 72 65 6c 65 61 73 65   { $debugrelease
0810: 62 65 66 6f 72 65 20 3d 3d 20 22 22 20 7d 20 7b  before == "" } {
0820: 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 66   return }..    f
0830: 6f 72 65 61 63 68 20 69 20 5b 61 72 72 61 79 20  oreach i [array 
0840: 6e 61 6d 65 73 20 64 61 74 61 43 20 24 67 72 6f  names dataC $gro
0850: 75 70 62 65 66 6f 72 65 2c 24 64 65 62 75 67 72  upbefore,$debugr
0860: 65 6c 65 61 73 65 62 65 66 6f 72 65 2c 2a 5d 20  eleasebefore,*] 
0870: 7b 0a 09 72 65 67 65 78 70 20 7b 5e 5b 5e 2c 5d  {..regexp {^[^,]
0880: 2b 2c 5b 5e 2c 5d 2b 2c 28 2e 2a 29 7d 20 24 69  +,[^,]+,(.*)} $i
0890: 20 7b 7d 20 70 72 6f 70 0a 0a 09 69 66 20 7b 20   {} prop...if { 
08a0: 24 67 72 6f 75 70 62 65 66 6f 72 65 20 3d 3d 20  $groupbefore == 
08b0: 22 41 6c 6c 22 20 7c 7c 20 24 64 65 62 75 67 72  "All" || $debugr
08c0: 65 6c 65 61 73 65 62 65 66 6f 72 65 20 3d 3d 20  eleasebefore == 
08d0: 22 62 6f 74 68 22 20 7d 20 7b 0a 09 20 20 20 20  "both" } {..    
08e0: 54 72 61 6e 73 66 65 72 44 61 74 61 54 6f 4c 6f  TransferDataToLo
08f0: 77 65 72 47 72 6f 75 70 73 20 24 67 72 6f 75 70  werGroups $group
0900: 62 65 66 6f 72 65 20 24 64 65 62 75 67 72 65 6c  before $debugrel
0910: 65 61 73 65 62 65 66 6f 72 65 20 24 70 72 6f 70  easebefore $prop
0920: 20 24 64 61 74 61 43 28 24 69 29 20 5c 0a 09 09   $dataC($i) \...
0930: 20 20 20 20 24 74 68 69 73 64 61 74 61 43 28 24      $thisdataC($
0940: 70 72 6f 70 29 20 64 61 74 61 43 0a 09 7d 0a 09  prop) dataC..}..
0950: 73 65 74 20 64 61 74 61 43 28 24 69 29 20 24 74  set dataC($i) $t
0960: 68 69 73 64 61 74 61 43 28 24 70 72 6f 70 29 0a  hisdataC($prop).
0970: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 65 61 63      }.    foreac
0980: 68 20 69 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  h i [array names
0990: 20 64 61 74 61 4c 20 24 64 65 62 75 67 72 65 6c   dataL $debugrel
09a0: 65 61 73 65 62 65 66 6f 72 65 2c 2a 5d 20 7b 0a  easebefore,*] {.
09b0: 09 72 65 67 65 78 70 20 7b 5e 5b 5e 2c 5d 2b 2c  .regexp {^[^,]+,
09c0: 28 2e 2a 29 7d 20 24 69 20 7b 7d 20 70 72 6f 70  (.*)} $i {} prop
09d0: 0a 09 69 66 20 7b 20 24 64 65 62 75 67 72 65 6c  ..if { $debugrel
09e0: 65 61 73 65 62 65 66 6f 72 65 20 3d 3d 20 22 62  easebefore == "b
09f0: 6f 74 68 22 20 7d 20 7b 0a 09 20 20 20 20 54 72  oth" } {..    Tr
0a00: 61 6e 73 66 65 72 44 61 74 61 54 6f 4c 6f 77 65  ansferDataToLowe
0a10: 72 47 72 6f 75 70 73 20 22 22 20 24 64 65 62 75  rGroups "" $debu
0a20: 67 72 65 6c 65 61 73 65 62 65 66 6f 72 65 20 24  greleasebefore $
0a30: 70 72 6f 70 20 24 64 61 74 61 4c 28 24 69 29 20  prop $dataL($i) 
0a40: 24 74 68 69 73 64 61 74 61 4c 28 24 70 72 6f 70  $thisdataL($prop
0a50: 29 20 5c 0a 09 09 64 61 74 61 4c 0a 09 7d 0a 09  ) \...dataL..}..
0a60: 73 65 74 20 64 61 74 61 4c 28 24 69 29 20 24 74  set dataL($i) $t
0a70: 68 69 73 64 61 74 61 4c 28 24 70 72 6f 70 29 0a  hisdataL($prop).
0a80: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 65 61 63      }.    foreac
0a90: 68 20 69 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  h i [array names
0aa0: 20 64 61 74 61 53 20 24 64 65 62 75 67 72 65 6c   dataS $debugrel
0ab0: 65 61 73 65 62 65 66 6f 72 65 2c 2a 5d 20 7b 0a  easebefore,*] {.
0ac0: 09 72 65 67 65 78 70 20 7b 5e 5b 5e 2c 5d 2b 2c  .regexp {^[^,]+,
0ad0: 28 2e 2a 29 7d 20 24 69 20 7b 7d 20 70 72 6f 70  (.*)} $i {} prop
0ae0: 0a 09 69 66 20 7b 20 21 5b 69 6e 66 6f 20 65 78  ..if { ![info ex
0af0: 69 73 74 73 20 74 68 69 73 64 61 74 61 53 28 24  ists thisdataS($
0b00: 70 72 6f 70 29 5d 20 7d 20 7b 20 63 6f 6e 74 69  prop)] } { conti
0b10: 6e 75 65 20 7d 0a 09 69 66 20 7b 20 24 64 65 62  nue }..if { $deb
0b20: 75 67 72 65 6c 65 61 73 65 62 65 66 6f 72 65 20  ugreleasebefore 
0b30: 3d 3d 20 22 62 6f 74 68 22 20 7d 20 7b 0a 09 20  == "both" } {.. 
0b40: 20 20 20 54 72 61 6e 73 66 65 72 44 61 74 61 54     TransferDataT
0b50: 6f 4c 6f 77 65 72 47 72 6f 75 70 73 20 22 22 20  oLowerGroups "" 
0b60: 24 64 65 62 75 67 72 65 6c 65 61 73 65 62 65 66  $debugreleasebef
0b70: 6f 72 65 20 24 70 72 6f 70 20 24 64 61 74 61 53  ore $prop $dataS
0b80: 28 24 69 29 20 24 74 68 69 73 64 61 74 61 53 28  ($i) $thisdataS(
0b90: 24 70 72 6f 70 29 20 5c 0a 09 09 64 61 74 61 53  $prop) \...dataS
0ba0: 0a 09 7d 0a 09 73 65 74 20 64 61 74 61 53 28 24  ..}..set dataS($
0bb0: 69 29 20 24 74 68 69 73 64 61 74 61 53 28 24 70  i) $thisdataS($p
0bc0: 72 6f 70 29 0a 20 20 20 20 7d 0a 20 20 20 20 66  rop).    }.    f
0bd0: 6f 72 65 61 63 68 20 69 20 5b 61 72 72 61 79 20  oreach i [array 
0be0: 6e 61 6d 65 73 20 64 61 74 61 45 20 24 64 65 62  names dataE $deb
0bf0: 75 67 72 65 6c 65 61 73 65 62 65 66 6f 72 65 2c  ugreleasebefore,
0c00: 2a 5d 20 7b 0a 09 72 65 67 65 78 70 20 7b 5e 5b  *] {..regexp {^[
0c10: 5e 2c 5d 2b 2c 28 2e 2a 29 7d 20 24 69 20 7b 7d  ^,]+,(.*)} $i {}
0c20: 20 70 72 6f 70 0a 09 69 66 20 7b 20 24 64 65 62   prop..if { $deb
0c30: 75 67 72 65 6c 65 61 73 65 62 65 66 6f 72 65 20  ugreleasebefore 
0c40: 3d 3d 20 22 62 6f 74 68 22 20 7d 20 7b 0a 09 20  == "both" } {.. 
0c50: 20 20 20 54 72 61 6e 73 66 65 72 44 61 74 61 54     TransferDataT
0c60: 6f 4c 6f 77 65 72 47 72 6f 75 70 73 20 22 22 20  oLowerGroups "" 
0c70: 24 64 65 62 75 67 72 65 6c 65 61 73 65 62 65 66  $debugreleasebef
0c80: 6f 72 65 20 24 70 72 6f 70 20 24 64 61 74 61 45  ore $prop $dataE
0c90: 28 24 69 29 20 24 74 68 69 73 64 61 74 61 45 28  ($i) $thisdataE(
0ca0: 24 70 72 6f 70 29 20 5c 0a 09 09 64 61 74 61 45  $prop) \...dataE
0cb0: 0a 09 7d 0a 09 73 65 74 20 64 61 74 61 45 28 24  ..}..set dataE($
0cc0: 69 29 20 24 74 68 69 73 64 61 74 61 45 28 24 70  i) $thisdataE($p
0cd0: 72 6f 70 29 0a 20 20 20 20 7d 0a 7d 0a 0a 70 72  rop).    }.}..pr
0ce0: 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 54 72 61  oc cproject::Tra
0cf0: 6e 73 66 65 72 44 61 74 61 54 6f 4c 6f 77 65 72  nsferDataToLower
0d00: 47 72 6f 75 70 73 20 7b 20 67 72 20 64 72 20 70  Groups { gr dr p
0d10: 72 6f 70 20 6f 6c 64 64 61 74 61 20 6e 65 77 64  rop olddata newd
0d20: 61 74 61 20 64 61 74 61 6e 61 6d 65 20 7d 20 7b  ata dataname } {
0d30: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61  .    variable da
0d40: 74 61 43 0a 20 20 20 20 76 61 72 69 61 62 6c 65  taC.    variable
0d50: 20 64 61 74 61 4c 0a 20 20 20 20 76 61 72 69 61   dataL.    varia
0d60: 62 6c 65 20 64 61 74 61 53 0a 20 20 20 20 76 61  ble dataS.    va
0d70: 72 69 61 62 6c 65 20 64 61 74 61 45 0a 0a 20 20  riable dataE..  
0d80: 20 20 75 70 76 61 72 20 30 20 24 64 61 74 61 6e    upvar 0 $datan
0d90: 61 6d 65 20 64 61 74 61 0a 0a 20 20 20 20 73 65  ame data..    se
0da0: 74 20 74 6f 61 64 64 20 22 22 0a 20 20 20 20 73  t toadd "".    s
0db0: 65 74 20 74 6f 64 65 6c 20 22 22 0a 0a 20 20 20  et todel ""..   
0dc0: 20 69 66 20 7b 20 21 5b 73 74 72 69 6e 67 20 6d   if { ![string m
0dd0: 61 74 63 68 20 2a 64 69 72 73 20 24 70 72 6f 70  atch *dirs $prop
0de0: 5d 20 7d 20 7b 0a 09 73 65 74 20 6f 6c 64 64 61  ] } {..set oldda
0df0: 74 61 4c 20 5b 72 65 67 65 78 70 20 2d 69 6e 6c  taL [regexp -inl
0e00: 69 6e 65 20 2d 61 6c 6c 20 7b 5b 5e 5c 73 3b 5d  ine -all {[^\s;]
0e10: 2b 7d 20 24 6f 6c 64 64 61 74 61 5d 0a 09 73 65  +} $olddata]..se
0e20: 74 20 6e 65 77 64 61 74 61 4c 20 5b 72 65 67 65  t newdataL [rege
0e30: 78 70 20 2d 69 6e 6c 69 6e 65 20 2d 61 6c 6c 20  xp -inline -all 
0e40: 7b 5b 5e 5c 73 3b 5d 2b 7d 20 24 6e 65 77 64 61  {[^\s;]+} $newda
0e50: 74 61 5d 0a 09 73 65 74 20 73 65 61 72 63 68 63  ta]..set searchc
0e60: 6d 64 20 6c 73 65 61 72 63 68 0a 20 20 20 20 7d  md lsearch.    }
0e70: 20 65 6c 73 65 20 7b 0a 09 73 65 74 20 6f 6c 64   else {..set old
0e80: 64 61 74 61 4c 20 24 6f 6c 64 64 61 74 61 0a 09  dataL $olddata..
0e90: 73 65 74 20 6e 65 77 64 61 74 61 4c 20 24 6e 65  set newdataL $ne
0ea0: 77 64 61 74 61 0a 09 73 65 74 20 73 65 61 72 63  wdata..set searc
0eb0: 68 63 6d 64 20 52 61 6d 44 65 62 75 67 67 65 72  hcmd RamDebugger
0ec0: 3a 3a 6c 73 65 61 72 63 68 66 69 6c 65 0a 20 20  ::lsearchfile.  
0ed0: 20 20 7d 0a 0a 20 20 20 20 66 6f 72 65 61 63 68    }..    foreach
0ee0: 20 69 20 24 6e 65 77 64 61 74 61 4c 20 7b 0a 09   i $newdataL {..
0ef0: 69 66 20 7b 20 5b 24 73 65 61 72 63 68 63 6d 64  if { [$searchcmd
0f00: 20 24 6f 6c 64 64 61 74 61 4c 20 24 69 5d 20 3d   $olddataL $i] =
0f10: 3d 20 2d 31 20 7d 20 7b 20 6c 61 70 70 65 6e 64  = -1 } { lappend
0f20: 20 74 6f 61 64 64 20 24 69 20 7d 0a 20 20 20 20   toadd $i }.    
0f30: 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  }.    foreach i 
0f40: 24 6f 6c 64 64 61 74 61 4c 20 7b 0a 09 69 66 20  $olddataL {..if 
0f50: 7b 20 5b 24 73 65 61 72 63 68 63 6d 64 20 24 6e  { [$searchcmd $n
0f60: 65 77 64 61 74 61 4c 20 24 69 5d 20 3d 3d 20 2d  ewdataL $i] == -
0f70: 31 20 7d 20 7b 20 6c 61 70 70 65 6e 64 20 74 6f  1 } { lappend to
0f80: 64 65 6c 20 24 69 20 7d 0a 20 20 20 20 7d 0a 20  del $i }.    }. 
0f90: 20 20 20 66 6f 72 65 61 63 68 20 69 20 5b 61 72     foreach i [ar
0fa0: 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61 20 2a  ray names data *
0fb0: 2c 24 70 72 6f 70 5d 20 7b 0a 09 73 77 69 74 63  ,$prop] {..switc
0fc0: 68 20 24 64 61 74 61 6e 61 6d 65 20 7b 0a 09 20  h $dataname {.. 
0fd0: 20 20 20 64 61 74 61 43 20 7b 20 72 65 67 65 78     dataC { regex
0fe0: 70 20 7b 5e 28 5b 5e 2c 5d 2b 29 2c 28 5b 5e 2c  p {^([^,]+),([^,
0ff0: 5d 2b 29 2c 28 2e 2a 29 7d 20 24 69 20 7b 7d 20  ]+),(.*)} $i {} 
1000: 67 72 5f 69 6e 20 64 72 5f 69 6e 20 70 72 6f 70  gr_in dr_in prop
1010: 5f 69 6e 20 7d 0a 09 20 20 20 20 64 61 74 61 4c  _in }..    dataL
1020: 20 2d 20 64 61 74 61 53 20 2d 20 64 61 74 61 45   - dataS - dataE
1030: 20 7b 0a 09 09 73 65 74 20 67 72 5f 69 6e 20 22   {...set gr_in "
1040: 22 0a 09 09 72 65 67 65 78 70 20 7b 5e 28 5b 5e  "...regexp {^([^
1050: 2c 5d 2b 29 2c 28 2e 2a 29 7d 20 24 69 20 7b 7d  ,]+),(.*)} $i {}
1060: 20 64 72 5f 69 6e 20 70 72 6f 70 5f 69 6e 0a 09   dr_in prop_in..
1070: 20 20 20 20 7d 0a 09 7d 0a 09 69 66 20 7b 20 24      }..}..if { $
1080: 67 72 5f 69 6e 20 3d 3d 20 24 67 72 20 26 26 20  gr_in == $gr && 
1090: 24 64 72 5f 69 6e 20 3d 3d 20 24 64 72 20 7d 20  $dr_in == $dr } 
10a0: 7b 20 63 6f 6e 74 69 6e 75 65 20 7d 0a 0a 09 69  { continue }...i
10b0: 66 20 7b 20 24 67 72 20 3d 3d 20 22 41 6c 6c 22  f { $gr == "All"
10c0: 20 26 26 20 24 64 72 20 3d 3d 20 22 62 6f 74 68   && $dr == "both
10d0: 22 20 7d 20 7b 0a 09 20 20 20 20 23 20 6e 6f 74  " } {..    # not
10e0: 68 69 6e 67 0a 09 7d 20 65 6c 73 65 69 66 20 7b  hing..} elseif {
10f0: 20 24 67 72 20 3d 3d 20 22 41 6c 6c 22 20 7d 20   $gr == "All" } 
1100: 7b 0a 09 20 20 20 20 69 66 20 7b 20 24 64 72 20  {..    if { $dr 
1110: 21 3d 20 24 64 72 5f 69 6e 20 7d 20 7b 20 63 6f  != $dr_in } { co
1120: 6e 74 69 6e 75 65 20 7d 0a 09 7d 20 65 6c 73 65  ntinue }..} else
1130: 69 66 20 7b 20 24 64 72 20 3d 3d 20 22 62 6f 74  if { $dr == "bot
1140: 68 22 20 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b  h" } {..    if {
1150: 20 24 67 72 20 21 3d 20 24 67 72 5f 69 6e 20 7d   $gr != $gr_in }
1160: 20 7b 20 63 6f 6e 74 69 6e 75 65 20 7d 0a 09 7d   { continue }..}
1170: 20 65 6c 73 65 20 7b 20 63 6f 6e 74 69 6e 75 65   else { continue
1180: 20 7d 0a 0a 09 69 66 20 7b 20 24 64 61 74 61 6e   }...if { $datan
1190: 61 6d 65 20 3d 3d 20 22 64 61 74 61 53 22 20 7d  ame == "dataS" }
11a0: 20 7b 0a 09 20 20 20 20 72 65 67 73 75 62 20 2d   {..    regsub -
11b0: 61 6c 6c 20 7b 28 3f 6e 29 5e 5c 73 2a 5c 23 2e  all {(?n)^\s*\#.
11c0: 2a 24 7d 20 24 64 61 74 61 28 24 69 29 20 22 22  *$} $data($i) ""
11d0: 20 72 65 73 0a 09 20 20 20 20 69 66 20 7b 20 5b   res..    if { [
11e0: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 72 65 73  string trim $res
11f0: 5d 20 3d 3d 20 22 22 20 7d 20 7b 0a 09 09 73 65  ] == "" } {...se
1200: 74 20 64 61 74 61 28 24 69 29 20 24 6e 65 77 64  t data($i) $newd
1210: 61 74 61 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  ata..    }..    
1220: 63 6f 6e 74 69 6e 75 65 0a 09 7d 0a 0a 09 69 66  continue..}...if
1230: 20 7b 20 21 5b 73 74 72 69 6e 67 20 6d 61 74 63   { ![string matc
1240: 68 20 2a 64 69 72 73 20 24 70 72 6f 70 5d 20 7d  h *dirs $prop] }
1250: 20 7b 0a 09 20 20 20 20 73 65 74 20 64 61 74 61   {..    set data
1260: 4c 6f 63 61 6c 20 5b 72 65 67 65 78 70 20 2d 69  Local [regexp -i
1270: 6e 6c 69 6e 65 20 2d 61 6c 6c 20 7b 5b 5e 5c 73  nline -all {[^\s
1280: 3b 5d 2b 7d 20 24 64 61 74 61 28 24 69 29 5d 0a  ;]+} $data($i)].
1290: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73  .} else {..    s
12a0: 65 74 20 64 61 74 61 4c 6f 63 61 6c 20 24 64 61  et dataLocal $da
12b0: 74 61 28 24 69 29 0a 09 7d 0a 09 66 6f 72 65 61  ta($i)..}..forea
12c0: 63 68 20 6a 20 24 74 6f 61 64 64 20 7b 0a 09 20  ch j $toadd {.. 
12d0: 20 20 20 69 66 20 7b 20 5b 24 73 65 61 72 63 68     if { [$search
12e0: 63 6d 64 20 24 64 61 74 61 4c 6f 63 61 6c 20 24  cmd $dataLocal $
12f0: 6a 5d 20 3d 3d 20 2d 31 20 7d 20 7b 0a 09 09 69  j] == -1 } {...i
1300: 66 20 7b 20 21 5b 73 74 72 69 6e 67 20 6d 61 74  f { ![string mat
1310: 63 68 20 2a 64 69 72 73 20 24 70 72 6f 70 5d 20  ch *dirs $prop] 
1320: 7d 20 7b 0a 09 09 20 20 20 20 61 70 70 65 6e 64  } {...    append
1330: 20 64 61 74 61 28 24 69 29 20 22 20 24 6a 22 0a   data($i) " $j".
1340: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20  ..} else {...   
1350: 20 6c 61 70 70 65 6e 64 20 64 61 74 61 28 24 69   lappend data($i
1360: 29 20 24 6a 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  ) $j...}..    }.
1370: 09 7d 0a 09 66 6f 72 65 61 63 68 20 6a 20 24 74  .}..foreach j $t
1380: 6f 64 65 6c 20 7b 0a 09 20 20 20 20 69 66 20 7b  odel {..    if {
1390: 20 5b 24 73 65 61 72 63 68 63 6d 64 20 24 64 61   [$searchcmd $da
13a0: 74 61 4c 6f 63 61 6c 20 24 6a 5d 20 21 3d 20 2d  taLocal $j] != -
13b0: 31 20 7d 20 7b 0a 09 09 69 66 20 7b 20 21 5b 73  1 } {...if { ![s
13c0: 74 72 69 6e 67 20 6d 61 74 63 68 20 2a 64 69 72  tring match *dir
13d0: 73 20 24 70 72 6f 70 5d 20 7d 20 7b 0a 09 09 20  s $prop] } {... 
13e0: 20 20 20 73 65 74 20 69 70 6f 73 20 5b 24 73 65     set ipos [$se
13f0: 61 72 63 68 63 6d 64 20 24 64 61 74 61 4c 6f 63  archcmd $dataLoc
1400: 61 6c 20 24 6a 5d 0a 09 09 20 20 20 20 73 65 74  al $j]...    set
1410: 20 64 61 74 61 28 24 69 29 20 5b 6a 6f 69 6e 20   data($i) [join 
1420: 5b 6c 72 65 70 6c 61 63 65 20 24 64 61 74 61 4c  [lreplace $dataL
1430: 6f 63 61 6c 20 24 69 70 6f 73 20 24 69 70 6f 73  ocal $ipos $ipos
1440: 5d 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  ]]...} else {...
1450: 20 20 20 20 73 65 74 20 69 70 6f 73 20 5b 24 73      set ipos [$s
1460: 65 61 72 63 68 63 6d 64 20 24 64 61 74 61 4c 6f  earchcmd $dataLo
1470: 63 61 6c 20 24 6a 5d 0a 09 09 20 20 20 20 73 65  cal $j]...    se
1480: 74 20 64 61 74 61 28 24 69 29 20 5b 6c 72 65 70  t data($i) [lrep
1490: 6c 61 63 65 20 24 64 61 74 61 28 24 69 29 20 24  lace $data($i) $
14a0: 69 70 6f 73 20 24 69 70 6f 73 5d 0a 09 09 7d 0a  ipos $ipos]...}.
14b0: 09 20 20 20 20 7d 0a 09 7d 0a 09 69 66 20 7b 20  .    }..}..if { 
14c0: 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2a  ![string match *
14d0: 64 69 72 73 20 24 70 72 6f 70 5d 20 7d 20 7b 0a  dirs $prop] } {.
14e0: 09 20 20 20 20 73 65 74 20 64 61 74 61 28 24 69  .    set data($i
14f0: 29 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  ) [string trim $
1500: 64 61 74 61 28 24 69 29 5d 0a 09 7d 0a 20 20 20  data($i)]..}.   
1510: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a   }.}..proc cproj
1520: 65 63 74 3a 3a 53 61 76 65 50 72 6f 6a 65 63 74  ect::SaveProject
1530: 43 20 7b 20 77 20 7d 20 7b 0a 20 20 20 20 76 61  C { w } {.    va
1540: 72 69 61 62 6c 65 20 70 72 6f 6a 65 63 74 0a 20  riable project. 
1550: 20 20 20 76 61 72 69 61 62 6c 65 20 67 72 6f 75     variable grou
1560: 70 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 67  p.    variable g
1570: 72 6f 75 70 73 0a 20 20 20 20 76 61 72 69 61 62  roups.    variab
1580: 6c 65 20 6c 69 6e 6b 73 0a 20 20 20 20 76 61 72  le links.    var
1590: 69 61 62 6c 65 20 73 63 72 69 70 74 74 61 62 73  iable scripttabs
15a0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 65  .    variable de
15b0: 62 75 67 72 65 6c 65 61 73 65 0a 20 20 20 20 76  bugrelease.    v
15c0: 61 72 69 61 62 6c 65 20 66 69 6c 65 73 0a 20 20  ariable files.  
15d0: 20 20 76 61 72 69 61 62 6c 65 20 74 68 69 73 64    variable thisd
15e0: 61 74 61 43 0a 20 20 20 20 76 61 72 69 61 62 6c  ataC.    variabl
15f0: 65 20 64 61 74 61 43 0a 20 20 20 20 76 61 72 69  e dataC.    vari
1600: 61 62 6c 65 20 74 68 69 73 64 61 74 61 4c 0a 20  able thisdataL. 
1610: 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61     variable data
1620: 4c 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 74  L.    variable t
1630: 68 69 73 64 61 74 61 53 0a 20 20 20 20 76 61 72  hisdataS.    var
1640: 69 61 62 6c 65 20 64 61 74 61 53 0a 20 20 20 20  iable dataS.    
1650: 76 61 72 69 61 62 6c 65 20 74 68 69 73 64 61 74  variable thisdat
1660: 61 45 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  aE.    variable 
1670: 64 61 74 61 45 0a 0a 20 20 20 20 69 66 20 7b 20  dataE..    if { 
1680: 24 70 72 6f 6a 65 63 74 20 3d 3d 20 22 22 20 7d  $project == "" }
1690: 20 7b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20   { return }..   
16a0: 20 73 79 6e 63 66 72 6f 6d 55 49 0a 0a 20 20 20   syncfromUI..   
16b0: 20 73 65 74 20 65 72 72 20 5b 63 61 74 63 68 20   set err [catch 
16c0: 7b 20 6f 70 65 6e 20 24 70 72 6f 6a 65 63 74 20  { open $project 
16d0: 77 20 7d 20 66 6f 75 74 5d 0a 20 20 20 20 69 66  w } fout].    if
16e0: 20 7b 20 24 65 72 72 20 7d 20 7b 0a 09 57 61 72   { $err } {..War
16f0: 6e 57 69 6e 20 22 43 6f 75 6c 64 20 6e 6f 74 20  nWin "Could not 
1700: 6f 70 65 6e 20 66 69 6c 65 20 27 24 70 72 6f 6a  open file '$proj
1710: 65 63 74 27 20 74 6f 20 73 61 76 65 20 28 24 66  ect' to save ($f
1720: 6f 75 74 29 22 20 24 77 0a 09 72 65 74 75 72 6e  out)" $w..return
1730: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 65 61  .    }.    forea
1740: 63 68 20 69 20 5b 6c 69 73 74 20 67 72 6f 75 70  ch i [list group
1750: 73 20 67 72 6f 75 70 20 6c 69 6e 6b 73 20 73 63  s group links sc
1760: 72 69 70 74 74 61 62 73 20 64 65 62 75 67 72 65  ripttabs debugre
1770: 6c 65 61 73 65 20 66 69 6c 65 73 20 74 68 69 73  lease files this
1780: 64 61 74 61 43 20 64 61 74 61 43 20 74 68 69 73  dataC dataC this
1790: 64 61 74 61 4c 20 5c 0a 09 20 20 20 20 64 61 74  dataL \..    dat
17a0: 61 4c 20 74 68 69 73 64 61 74 61 53 20 64 61 74  aL thisdataS dat
17b0: 61 53 20 74 68 69 73 64 61 74 61 45 20 64 61 74  aS thisdataE dat
17c0: 61 45 20 5d 20 7b 0a 09 69 66 20 7b 20 5b 61 72  aE ] {..if { [ar
17d0: 72 61 79 20 65 78 69 73 74 73 20 24 69 5d 20 7d  ray exists $i] }
17e0: 20 7b 0a 09 20 20 20 20 70 75 74 73 20 24 66 6f   {..    puts $fo
17f0: 75 74 20 5b 6c 69 73 74 20 61 72 72 61 79 20 73  ut [list array s
1800: 65 74 20 24 69 20 5b 61 72 72 61 79 20 67 65 74  et $i [array get
1810: 20 24 69 5d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a   $i]]..} else {.
1820: 09 20 20 20 20 70 75 74 73 20 24 66 6f 75 74 20  .    puts $fout 
1830: 5b 6c 69 73 74 20 73 65 74 20 24 69 20 5b 73 65  [list set $i [se
1840: 74 20 24 69 5d 5d 0a 09 7d 0a 20 20 20 20 7d 0a  t $i]]..}.    }.
1850: 20 20 20 20 63 6c 6f 73 65 20 24 66 6f 75 74 0a      close $fout.
1860: 0a 20 20 20 20 69 66 20 7b 20 5b 52 61 6d 44 65  .    if { [RamDe
1870: 62 75 67 67 65 72 3a 3a 6c 73 65 61 72 63 68 66  bugger::lsearchf
1880: 69 6c 65 20 24 52 61 6d 44 65 62 75 67 67 65 72  ile $RamDebugger
1890: 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65 6e 74  ::options(recent
18a0: 70 72 6f 6a 65 63 74 73 29 20 24 70 72 6f 6a 65  projects) $proje
18b0: 63 74 5d 20 21 3d 20 2d 31 20 7d 20 7b 0a 09 73  ct] != -1 } {..s
18c0: 65 74 20 69 70 6f 73 20 5b 52 61 6d 44 65 62 75  et ipos [RamDebu
18d0: 67 67 65 72 3a 3a 6c 73 65 61 72 63 68 66 69 6c  gger::lsearchfil
18e0: 65 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a 3a  e $RamDebugger::
18f0: 6f 70 74 69 6f 6e 73 28 72 65 63 65 6e 74 70 72  options(recentpr
1900: 6f 6a 65 63 74 73 29 20 24 70 72 6f 6a 65 63 74  ojects) $project
1910: 5d 0a 09 73 65 74 20 52 61 6d 44 65 62 75 67 67  ]..set RamDebugg
1920: 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65  er::options(rece
1930: 6e 74 70 72 6f 6a 65 63 74 73 29 20 5b 6c 72 65  ntprojects) [lre
1940: 70 6c 61 63 65 20 24 52 61 6d 44 65 62 75 67 67  place $RamDebugg
1950: 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65  er::options(rece
1960: 6e 74 70 72 6f 6a 65 63 74 73 29 20 5c 0a 09 20  ntprojects) \.. 
1970: 20 20 20 24 69 70 6f 73 20 24 69 70 6f 73 5d 0a     $ipos $ipos].
1980: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 52 61      }.    set Ra
1990: 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74 69 6f  mDebugger::optio
19a0: 6e 73 28 72 65 63 65 6e 74 70 72 6f 6a 65 63 74  ns(recentproject
19b0: 73 29 20 5b 6c 69 6e 73 65 72 74 20 24 52 61 6d  s) [linsert $Ram
19c0: 44 65 62 75 67 67 65 72 3a 3a 6f 70 74 69 6f 6e  Debugger::option
19d0: 73 28 72 65 63 65 6e 74 70 72 6f 6a 65 63 74 73  s(recentprojects
19e0: 29 20 5c 0a 09 20 20 20 20 30 20 24 70 72 6f 6a  ) \..    0 $proj
19f0: 65 63 74 5d 0a 7d 0a 0a 0a 70 72 6f 63 20 63 70  ect].}...proc cp
1a00: 72 6f 6a 65 63 74 3a 3a 55 70 64 61 74 65 43 6f  roject::UpdateCo
1a10: 6d 62 6f 56 61 6c 75 65 73 20 7b 20 63 6f 6d 62  mboValues { comb
1a20: 6f 20 76 61 72 6e 61 6d 65 20 7d 20 7b 0a 20 20  o varname } {.  
1a30: 20 20 69 66 20 7b 20 21 5b 77 69 6e 66 6f 20 65    if { ![winfo e
1a40: 78 69 73 74 73 20 24 63 6f 6d 62 6f 5d 20 7d 20  xists $combo] } 
1a50: 7b 20 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 24  { return }.    $
1a60: 63 6f 6d 62 6f 20 63 6f 6e 66 69 67 75 72 65 20  combo configure 
1a70: 2d 76 61 6c 75 65 73 20 5b 73 65 74 20 24 76 61  -values [set $va
1a80: 72 6e 61 6d 65 5d 0a 7d 0a 0a 70 72 6f 63 20 63  rname].}..proc c
1a90: 70 72 6f 6a 65 63 74 3a 3a 4e 65 77 50 72 6f 6a  project::NewProj
1aa0: 65 63 74 20 7b 20 77 20 7d 20 7b 0a 20 20 20 20  ect { w } {.    
1ab0: 76 61 72 69 61 62 6c 65 20 70 72 6f 6a 65 63 74  variable project
1ac0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 67 72  .    variable gr
1ad0: 6f 75 70 62 65 66 6f 72 65 0a 20 20 20 20 76 61  oupbefore.    va
1ae0: 72 69 61 62 6c 65 20 67 72 6f 75 70 0a 20 20 20  riable group.   
1af0: 20 76 61 72 69 61 62 6c 65 20 67 72 6f 75 70 73   variable groups
1b00: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 69  .    variable li
1b10: 6e 6b 73 0a 20 20 20 20 76 61 72 69 61 62 6c 65  nks.    variable
1b20: 20 73 63 72 69 70 74 74 61 62 73 0a 20 20 20 20   scripttabs.    
1b30: 76 61 72 69 61 62 6c 65 20 64 65 62 75 67 72 65  variable debugre
1b40: 6c 65 61 73 65 0a 20 20 20 20 76 61 72 69 61 62  lease.    variab
1b50: 6c 65 20 66 69 6c 65 73 0a 20 20 20 20 76 61 72  le files.    var
1b60: 69 61 62 6c 65 20 74 68 69 73 64 61 74 61 43 0a  iable thisdataC.
1b70: 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74      variable dat
1b80: 61 43 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  aC.    variable 
1b90: 74 68 69 73 64 61 74 61 4c 0a 20 20 20 20 76 61  thisdataL.    va
1ba0: 72 69 61 62 6c 65 20 64 61 74 61 4c 0a 20 20 20  riable dataL.   
1bb0: 20 76 61 72 69 61 62 6c 65 20 74 68 69 73 64 61   variable thisda
1bc0: 74 61 45 0a 20 20 20 20 76 61 72 69 61 62 6c 65  taE.    variable
1bd0: 20 64 61 74 61 45 0a 0a 0a 20 20 20 20 73 65 74   dataE...    set
1be0: 20 74 79 70 65 73 20 7b 0a 09 7b 7b 50 72 6f 6a   types {..{{Proj
1bf0: 65 63 74 20 66 69 6c 65 73 7d 20 20 20 20 20 20  ect files}      
1c00: 7b 2e 70 72 6a 7d 20 20 20 7d 0a 09 7b 7b 41 6c  {.prj}   }..{{Al
1c10: 6c 20 46 69 6c 65 73 7d 20 20 20 20 20 20 20 20  l Files}        
1c20: 2a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  *          }.   
1c30: 20 7d 0a 20 20 20 20 73 65 74 20 64 69 72 20 24   }.    set dir $
1c40: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74  RamDebugger::opt
1c50: 69 6f 6e 73 28 64 65 66 61 75 6c 74 64 69 72 29  ions(defaultdir)
1c60: 0a 0a 20 20 20 20 73 65 74 20 66 69 6c 65 20 5b  ..    set file [
1c70: 74 6b 5f 67 65 74 53 61 76 65 46 69 6c 65 20 2d  tk_getSaveFile -
1c80: 66 69 6c 65 74 79 70 65 73 20 24 74 79 70 65 73  filetypes $types
1c90: 20 2d 69 6e 69 74 69 61 6c 64 69 72 20 24 64 69   -initialdir $di
1ca0: 72 20 2d 70 61 72 65 6e 74 20 24 77 20 5c 0a 09  r -parent $w \..
1cb0: 2d 74 69 74 6c 65 20 22 4e 65 77 20 70 72 6f 6a  -title "New proj
1cc0: 65 63 74 22 20 2d 64 65 66 61 75 6c 74 65 78 74  ect" -defaultext
1cd0: 65 6e 73 69 6f 6e 20 2e 70 72 6a 5d 0a 20 20 20  ension .prj].   
1ce0: 20 69 66 20 7b 20 24 66 69 6c 65 20 3d 3d 20 22   if { $file == "
1cf0: 22 20 7d 20 7b 20 72 65 74 75 72 6e 20 7d 0a 0a  " } { return }..
1d00: 20 20 20 20 73 65 74 20 52 61 6d 44 65 62 75 67      set RamDebug
1d10: 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 64 65 66  ger::options(def
1d20: 61 75 6c 74 64 69 72 29 20 5b 66 69 6c 65 20 64  aultdir) [file d
1d30: 69 72 6e 61 6d 65 20 24 66 69 6c 65 5d 0a 0a 20  irname $file].. 
1d40: 20 20 20 73 65 74 20 70 72 6f 6a 65 63 74 20 24     set project $
1d50: 66 69 6c 65 0a 20 20 20 20 73 65 74 20 64 65 62  file.    set deb
1d60: 75 67 72 65 6c 65 61 73 65 62 65 66 6f 72 65 20  ugreleasebefore 
1d70: 22 22 0a 20 20 20 20 73 65 74 20 67 72 6f 75 70  "".    set group
1d80: 73 20 41 6c 6c 0a 20 20 20 20 73 65 74 20 6c 69  s All.    set li
1d90: 6e 6b 73 20 4c 69 6e 6b 0a 20 20 20 20 73 65 74  nks Link.    set
1da0: 20 73 63 72 69 70 74 74 61 62 73 20 53 63 72 69   scripttabs Scri
1db0: 70 74 0a 20 20 20 20 73 65 74 20 66 69 6c 65 73  pt.    set files
1dc0: 20 22 22 0a 0a 20 20 20 20 4e 65 77 44 61 74 61   ""..    NewData
1dd0: 0a 0a 20 20 20 20 73 65 74 20 64 65 62 75 67 72  ..    set debugr
1de0: 65 6c 65 61 73 65 20 64 65 62 75 67 0a 20 20 20  elease debug.   
1df0: 20 73 65 74 20 67 72 6f 75 70 20 41 6c 6c 0a 7d   set group All.}
1e00: 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a  ..proc cproject:
1e10: 3a 4e 65 77 44 61 74 61 20 7b 7d 20 7b 0a 20 20  :NewData {} {.  
1e20: 20 20 76 61 72 69 61 62 6c 65 20 70 72 6f 6a 65    variable proje
1e30: 63 74 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ct.    variable 
1e40: 74 68 69 73 64 61 74 61 43 0a 20 20 20 20 76 61  thisdataC.    va
1e50: 72 69 61 62 6c 65 20 64 61 74 61 43 0a 20 20 20  riable dataC.   
1e60: 20 76 61 72 69 61 62 6c 65 20 74 68 69 73 64 61   variable thisda
1e70: 74 61 4c 0a 20 20 20 20 76 61 72 69 61 62 6c 65  taL.    variable
1e80: 20 64 61 74 61 4c 0a 20 20 20 20 76 61 72 69 61   dataL.    varia
1e90: 62 6c 65 20 74 68 69 73 64 61 74 61 53 0a 20 20  ble thisdataS.  
1ea0: 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 53    variable dataS
1eb0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 68  .    variable th
1ec0: 69 73 64 61 74 61 45 0a 20 20 20 20 76 61 72 69  isdataE.    vari
1ed0: 61 62 6c 65 20 64 61 74 61 45 0a 20 20 20 20 76  able dataE.    v
1ee0: 61 72 69 61 62 6c 65 20 67 72 6f 75 70 73 0a 20  ariable groups. 
1ef0: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 69 6e 6b     variable link
1f00: 73 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 73  s.    variable s
1f10: 63 72 69 70 74 74 61 62 73 0a 0a 20 20 20 20 66  cripttabs..    f
1f20: 6f 72 65 61 63 68 20 69 20 5b 6c 69 73 74 20 43  oreach i [list C
1f30: 20 4c 20 53 20 45 5d 20 7b 0a 09 63 61 74 63 68   L S E] {..catch
1f40: 20 7b 20 75 6e 73 65 74 20 64 61 74 61 24 69 20   { unset data$i 
1f50: 7d 0a 09 63 61 74 63 68 20 7b 20 75 6e 73 65 74  }..catch { unset
1f60: 20 74 68 69 73 64 61 74 61 24 69 20 7d 0a 20 20   thisdata$i }.  
1f70: 20 20 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20    }.    foreach 
1f80: 69 20 5b 6c 69 73 74 20 64 65 62 75 67 20 72 65  i [list debug re
1f90: 6c 65 61 73 65 20 62 6f 74 68 5d 20 7b 0a 09 66  lease both] {..f
1fa0: 6f 72 65 61 63 68 20 67 72 6f 75 70 20 24 67 72  oreach group $gr
1fb0: 6f 75 70 73 20 7b 0a 09 20 20 20 20 73 65 74 20  oups {..    set 
1fc0: 64 61 74 61 43 28 24 67 72 6f 75 70 2c 24 69 2c  dataC($group,$i,
1fd0: 69 6e 63 6c 75 64 65 64 69 72 73 29 20 2e 0a 09  includedirs) ...
1fe0: 20 20 20 20 73 65 74 20 64 61 74 61 43 28 24 67      set dataC($g
1ff0: 72 6f 75 70 2c 24 69 2c 64 65 66 69 6e 65 73 29  roup,$i,defines)
2000: 20 22 22 0a 09 20 20 20 20 73 65 74 20 64 61 74   ""..    set dat
2010: 61 43 28 24 67 72 6f 75 70 2c 24 69 2c 63 6f 6d  aC($group,$i,com
2020: 70 69 6c 65 72 29 20 22 67 63 63 22 0a 09 20 20  piler) "gcc"..  
2030: 20 20 73 77 69 74 63 68 20 24 69 20 7b 0a 09 09    switch $i {...
2040: 64 65 62 75 67 20 7b 0a 09 09 20 20 20 20 73 65  debug {...    se
2050: 74 20 64 61 74 61 43 28 24 67 72 6f 75 70 2c 24  t dataC($group,$
2060: 69 2c 66 6c 61 67 73 29 20 22 2d 63 20 2d 67 22  i,flags) "-c -g"
2070: 0a 09 09 7d 0a 09 09 72 65 6c 65 61 73 65 20 7b  ...}...release {
2080: 0a 09 09 20 20 20 20 73 65 74 20 64 61 74 61 43  ...    set dataC
2090: 28 24 67 72 6f 75 70 2c 24 69 2c 66 6c 61 67 73  ($group,$i,flags
20a0: 29 20 22 2d 63 20 2d 4f 33 22 0a 09 09 7d 0a 09  ) "-c -O3"...}..
20b0: 09 62 6f 74 68 20 7b 0a 09 09 20 20 20 20 73 65  .both {...    se
20c0: 74 20 64 61 74 61 43 28 24 67 72 6f 75 70 2c 24  t dataC($group,$
20d0: 69 2c 66 6c 61 67 73 29 20 22 2d 63 22 0a 09 09  i,flags) "-c"...
20e0: 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 66 6f 72  }..    }..}..for
20f0: 65 61 63 68 20 6c 69 6e 6b 20 24 6c 69 6e 6b 73  each link $links
2100: 20 7b 0a 09 20 20 20 20 73 65 74 20 64 61 74 61   {..    set data
2110: 4c 28 24 69 2c 24 6c 69 6e 6b 2c 6c 69 62 72 61  L($i,$link,libra
2120: 72 69 65 73 64 69 72 73 29 20 2e 0a 09 20 20 20  riesdirs) ...   
2130: 20 73 65 74 20 64 61 74 61 4c 28 24 69 2c 24 6c   set dataL($i,$l
2140: 69 6e 6b 2c 6c 69 6e 6b 67 72 6f 75 70 73 29 20  ink,linkgroups) 
2150: 41 6c 6c 0a 09 20 20 20 20 73 65 74 20 64 61 74  All..    set dat
2160: 61 4c 28 24 69 2c 24 6c 69 6e 6b 2c 6c 69 62 72  aL($i,$link,libr
2170: 61 72 69 65 73 29 20 22 6c 69 62 63 20 6c 69 62  aries) "libc lib
2180: 6d 22 0a 09 20 20 20 20 73 65 74 20 64 61 74 61  m"..    set data
2190: 4c 28 24 69 2c 24 6c 69 6e 6b 2c 6c 69 6e 6b 65  L($i,$link,linke
21a0: 72 29 20 22 67 63 63 22 0a 09 20 20 20 20 73 65  r) "gcc"..    se
21b0: 74 20 64 61 74 61 4c 28 24 69 2c 24 6c 69 6e 6b  t dataL($i,$link
21c0: 2c 6c 69 6e 6b 66 6c 61 67 73 29 20 22 22 0a 09  ,linkflags) ""..
21d0: 20 20 20 20 73 65 74 20 64 61 74 61 4c 28 24 69      set dataL($i
21e0: 2c 24 6c 69 6e 6b 2c 6c 69 6e 6b 65 78 65 29 20  ,$link,linkexe) 
21f0: 5b 66 69 6c 65 20 72 6f 6f 74 20 5b 66 69 6c 65  [file root [file
2200: 20 74 61 69 6c 20 24 70 72 6f 6a 65 63 74 5d 5d   tail $project]]
2210: 0a 09 20 20 20 20 0a 09 20 20 20 20 69 66 20 7b  ..    ..    if {
2220: 20 24 69 20 21 3d 20 22 62 6f 74 68 22 20 7d 20   $i != "both" } 
2230: 7b 0a 09 09 73 65 74 20 64 61 74 61 45 28 24 69  {...set dataE($i
2240: 2c 65 78 65 63 64 69 72 29 20 5b 66 69 6c 65 20  ,execdir) [file 
2250: 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61  join [file dirna
2260: 6d 65 20 24 70 72 6f 6a 65 63 74 5d 20 5b 66 69  me $project] [fi
2270: 6c 65 20 72 6f 6f 74 20 24 70 72 6f 6a 65 63 74  le root $project
2280: 5d 5f 24 69 5d 0a 09 09 73 65 74 20 64 61 74 61  ]_$i]...set data
2290: 45 28 24 69 2c 65 78 65 29 20 5b 66 69 6c 65 20  E($i,exe) [file 
22a0: 72 6f 6f 74 20 5b 66 69 6c 65 20 74 61 69 6c 20  root [file tail 
22b0: 24 70 72 6f 6a 65 63 74 5d 5d 0a 09 20 20 20 20  $project]]..    
22c0: 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 64  } else {...set d
22d0: 61 74 61 45 28 24 69 2c 65 78 65 63 64 69 72 29  ataE($i,execdir)
22e0: 20 22 22 0a 09 09 73 65 74 20 64 61 74 61 45 28   ""...set dataE(
22f0: 24 69 2c 65 78 65 29 20 22 22 0a 09 09 0a 09 20  $i,exe) ""..... 
2300: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 64 61     }..    set da
2310: 74 61 45 28 24 69 2c 65 78 65 61 72 67 73 29 20  taE($i,exeargs) 
2320: 22 22 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 73  ""..}..foreach s
2330: 63 72 69 70 74 74 61 62 20 24 73 63 72 69 70 74  cripttab $script
2340: 74 61 62 73 20 7b 0a 09 20 20 20 20 73 65 74 20  tabs {..    set 
2350: 64 61 74 61 53 28 24 69 2c 24 73 63 72 69 70 74  dataS($i,$script
2360: 74 61 62 2c 73 63 72 69 70 74 29 20 68 65 6c 70  tab,script) help
2370: 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 53 28  ..    set dataS(
2380: 24 69 2c 24 73 63 72 69 70 74 74 61 62 2c 65 78  $i,$scripttab,ex
2390: 65 63 75 74 65 74 69 6d 65 29 20 22 4e 6f 20 61  ecutetime) "No a
23a0: 75 74 6f 6d 61 74 69 63 22 0a 09 7d 0a 20 20 20  utomatic"..}.   
23b0: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a   }.}..proc cproj
23c0: 65 63 74 3a 3a 4f 70 65 6e 50 72 6f 6a 65 63 74  ect::OpenProject
23d0: 20 7b 20 77 20 7b 20 61 73 6b 20 31 20 7d 20 7d   { w { ask 1 } }
23e0: 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   {.    variable 
23f0: 70 72 6f 6a 65 63 74 0a 20 20 20 20 76 61 72 69  project.    vari
2400: 61 62 6c 65 20 67 72 6f 75 70 62 65 66 6f 72 65  able groupbefore
2410: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 67 72  .    variable gr
2420: 6f 75 70 0a 20 20 20 20 76 61 72 69 61 62 6c 65  oup.    variable
2430: 20 67 72 6f 75 70 73 0a 20 20 20 20 76 61 72 69   groups.    vari
2440: 61 62 6c 65 20 6c 69 6e 6b 73 0a 20 20 20 20 76  able links.    v
2450: 61 72 69 61 62 6c 65 20 73 63 72 69 70 74 74 61  ariable scriptta
2460: 62 73 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  bs.    variable 
2470: 64 65 62 75 67 72 65 6c 65 61 73 65 0a 20 20 20  debugrelease.   
2480: 20 76 61 72 69 61 62 6c 65 20 66 69 6c 65 73 0a   variable files.
2490: 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74      variable dat
24a0: 61 43 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  aC.    variable 
24b0: 64 61 74 61 4c 0a 20 20 20 20 76 61 72 69 61 62  dataL.    variab
24c0: 6c 65 20 64 61 74 61 45 0a 20 20 20 20 76 61 72  le dataE.    var
24d0: 69 61 62 6c 65 20 64 65 62 75 67 72 65 6c 65 61  iable debugrelea
24e0: 73 65 62 65 66 6f 72 65 0a 0a 20 20 20 20 69 66  sebefore..    if
24f0: 20 7b 20 24 61 73 6b 20 7d 20 7b 0a 23 20 20 20   { $ask } {.#   
2500: 20 20 20 20 20 20 20 73 65 74 20 72 65 74 20 5b         set ret [
2510: 44 69 61 6c 6f 67 57 69 6e 3a 3a 6d 65 73 73 61  DialogWin::messa
2520: 67 65 42 6f 78 20 2d 64 65 66 61 75 6c 74 20 6f  geBox -default o
2530: 6b 20 2d 69 63 6f 6e 20 77 61 72 6e 69 6e 67 20  k -icon warning 
2540: 2d 6d 65 73 73 61 67 65 20 5c 0a 23 20 20 20 20  -message \.#    
2550: 20 20 20 20 20 20 20 20 20 20 22 41 72 65 20 79            "Are y
2560: 6f 75 20 73 75 72 65 20 74 6f 20 64 69 73 63 61  ou sure to disca
2570: 72 64 20 61 6c 6c 20 70 72 6f 6a 65 63 74 20 64  rd all project d
2580: 61 74 61 3f 22 20 2d 70 61 72 65 6e 74 20 24 77  ata?" -parent $w
2590: 20 5c 0a 23 20 20 20 20 20 20 20 20 20 20 20 20   \.#            
25a0: 20 20 2d 74 69 74 6c 65 20 22 64 69 73 63 61 72    -title "discar
25b0: 64 20 64 61 74 61 22 20 2d 74 79 70 65 20 6f 6b  d data" -type ok
25c0: 63 61 6e 63 65 6c 5d 0a 23 20 20 20 20 20 20 20  cancel].#       
25d0: 20 20 20 69 66 20 7b 20 24 72 65 74 20 3d 3d 20     if { $ret == 
25e0: 22 63 61 6e 63 65 6c 22 20 7d 20 7b 20 72 65 74  "cancel" } { ret
25f0: 75 72 6e 20 7d 0a 0a 09 73 65 74 20 74 79 70 65  urn }...set type
2600: 73 20 7b 0a 09 20 20 20 20 7b 7b 50 72 6f 6a 65  s {..    {{Proje
2610: 63 74 20 66 69 6c 65 73 7d 20 20 20 20 20 20 7b  ct files}      {
2620: 2e 70 72 6a 7d 20 20 20 7d 0a 09 20 20 20 20 7b  .prj}   }..    {
2630: 7b 41 6c 6c 20 46 69 6c 65 73 7d 20 20 20 20 20  {All Files}     
2640: 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 7d 0a     *          }.
2650: 09 7d 0a 09 0a 09 73 65 74 20 64 69 72 20 24 52  .}....set dir $R
2660: 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74 69  amDebugger::opti
2670: 6f 6e 73 28 64 65 66 61 75 6c 74 64 69 72 29 0a  ons(defaultdir).
2680: 09 0a 09 73 65 74 20 66 69 6c 65 20 5b 74 6b 5f  ...set file [tk_
2690: 67 65 74 4f 70 65 6e 46 69 6c 65 20 2d 66 69 6c  getOpenFile -fil
26a0: 65 74 79 70 65 73 20 24 74 79 70 65 73 20 2d 69  etypes $types -i
26b0: 6e 69 74 69 61 6c 64 69 72 20 24 64 69 72 20 2d  nitialdir $dir -
26c0: 70 61 72 65 6e 74 20 24 77 20 5c 0a 09 20 20 20  parent $w \..   
26d0: 20 2d 74 69 74 6c 65 20 22 4f 70 65 6e 20 65 78   -title "Open ex
26e0: 69 73 74 69 6e 67 20 70 72 6f 6a 65 63 74 22 20  isting project" 
26f0: 2d 64 65 66 61 75 6c 74 65 78 74 65 6e 73 69 6f  -defaultextensio
2700: 6e 20 2e 70 72 6a 5d 0a 09 69 66 20 7b 20 24 66  n .prj]..if { $f
2710: 69 6c 65 20 3d 3d 20 22 22 20 7d 20 7b 20 72 65  ile == "" } { re
2720: 74 75 72 6e 20 7d 0a 20 20 20 20 7d 20 65 6c 73  turn }.    } els
2730: 65 20 7b 20 73 65 74 20 66 69 6c 65 20 24 70 72  e { set file $pr
2740: 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 73 65 74  oject }..    set
2750: 20 70 72 6f 6a 65 63 74 20 24 66 69 6c 65 0a 0a   project $file..
2760: 20 20 20 20 74 72 61 63 65 20 76 64 65 6c 65 74      trace vdelet
2770: 65 20 3a 3a 63 70 72 6f 6a 65 63 74 3a 3a 67 72  e ::cproject::gr
2780: 6f 75 70 20 77 20 22 63 70 72 6f 6a 65 63 74 3a  oup w "cproject:
2790: 3a 53 65 74 47 72 6f 75 70 41 63 74 69 76 65 3b  :SetGroupActive;
27a0: 23 22 0a 20 20 20 20 74 72 61 63 65 20 76 64 65  #".    trace vde
27b0: 6c 65 74 65 20 3a 3a 63 70 72 6f 6a 65 63 74 3a  lete ::cproject:
27c0: 3a 64 65 62 75 67 72 65 6c 65 61 73 65 20 77 20  :debugrelease w 
27d0: 22 63 70 72 6f 6a 65 63 74 3a 3a 53 65 74 44 65  "cproject::SetDe
27e0: 62 75 67 52 65 6c 65 61 73 65 41 63 74 69 76 65  bugReleaseActive
27f0: 3b 23 22 0a 20 20 20 20 74 72 61 63 65 20 76 64  ;#".    trace vd
2800: 65 6c 65 74 65 20 3a 3a 63 70 72 6f 6a 65 63 74  elete ::cproject
2810: 3a 3a 6c 69 6e 6b 73 20 77 20 22 55 70 64 61 74  ::links w "Updat
2820: 65 4c 69 6e 6b 74 61 62 73 20 3b 23 22 0a 20 20  eLinktabs ;#".  
2830: 20 20 74 72 61 63 65 20 76 64 65 6c 65 74 65 20    trace vdelete 
2840: 3a 3a 63 70 72 6f 6a 65 63 74 3a 3a 73 63 72 69  ::cproject::scri
2850: 70 74 74 61 62 73 20 77 20 22 55 70 64 61 74 65  pttabs w "Update
2860: 53 63 72 69 70 74 74 61 62 73 20 3b 23 22 0a 20  Scripttabs ;#". 
2870: 20 20 20 0a 20 20 20 20 73 65 74 20 65 72 72 20     .    set err 
2880: 5b 63 61 74 63 68 20 7b 0a 09 69 66 20 7b 20 5b  [catch {..if { [
2890: 69 6e 74 65 72 70 20 65 78 69 73 74 73 20 63 70  interp exists cp
28a0: 72 6f 6a 65 63 74 5f 74 6d 70 5d 20 7d 20 7b 20  roject_tmp] } { 
28b0: 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 63 70  interp delete cp
28c0: 72 6f 6a 65 63 74 5f 74 6d 70 20 7d 0a 09 69 6e  roject_tmp }..in
28d0: 74 65 72 70 20 63 72 65 61 74 65 20 63 70 72 6f  terp create cpro
28e0: 6a 65 63 74 5f 74 6d 70 0a 09 63 70 72 6f 6a 65  ject_tmp..cproje
28f0: 63 74 5f 74 6d 70 20 65 76 61 6c 20 5b 6c 69 73  ct_tmp eval [lis
2900: 74 20 73 6f 75 72 63 65 20 24 66 69 6c 65 5d 0a  t source $file].
2910: 09 73 65 74 20 67 72 6f 75 70 73 20 5b 63 70 72  .set groups [cpr
2920: 6f 6a 65 63 74 5f 74 6d 70 20 65 76 61 6c 20 73  oject_tmp eval s
2930: 65 74 20 67 72 6f 75 70 73 5d 0a 09 69 66 20 7b  et groups]..if {
2940: 20 5b 63 61 74 63 68 20 7b 20 73 65 74 20 6c 69   [catch { set li
2950: 6e 6b 73 20 5b 63 70 72 6f 6a 65 63 74 5f 74 6d  nks [cproject_tm
2960: 70 20 65 76 61 6c 20 73 65 74 20 6c 69 6e 6b 73  p eval set links
2970: 5d 20 7d 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74  ] }]} {..    set
2980: 20 6c 69 6e 6b 73 20 4c 69 6e 6b 0a 09 7d 0a 09   links Link..}..
2990: 69 66 20 7b 20 5b 63 61 74 63 68 20 7b 20 73 65  if { [catch { se
29a0: 74 20 73 63 72 69 70 74 74 61 62 73 20 5b 63 70  t scripttabs [cp
29b0: 72 6f 6a 65 63 74 5f 74 6d 70 20 65 76 61 6c 20  roject_tmp eval 
29c0: 73 65 74 20 73 63 72 69 70 74 74 61 62 73 5d 20  set scripttabs] 
29d0: 7d 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 73  }]} {..    set s
29e0: 63 72 69 70 74 74 61 62 73 20 53 63 72 69 70 74  cripttabs Script
29f0: 0a 09 7d 0a 09 69 6e 74 65 72 70 20 64 65 6c 65  ..}..interp dele
2a00: 74 65 20 63 70 72 6f 6a 65 63 74 5f 74 6d 70 0a  te cproject_tmp.
2a10: 09 23 20 74 72 69 63 6b 20 62 65 63 61 75 73 65  .# trick because
2a20: 20 4e 65 77 44 61 74 61 20 6e 65 65 64 73 20 74   NewData needs t
2a30: 6f 20 68 61 76 65 20 67 72 6f 75 70 73 20 61 6e  o have groups an
2a40: 64 20 6c 69 6e 6b 73 20 64 65 66 69 6e 65 64 0a  d links defined.
2a50: 09 4e 65 77 44 61 74 61 0a 09 73 6f 75 72 63 65  .NewData..source
2a60: 20 24 66 69 6c 65 0a 20 20 20 20 7d 20 65 72 72   $file.    } err
2a70: 73 74 72 69 6e 67 5d 0a 20 20 20 20 0a 20 20 20  string].    .   
2a80: 20 69 66 20 7b 20 24 65 72 72 20 7d 20 7b 0a 09   if { $err } {..
2a90: 57 61 72 6e 57 69 6e 20 22 45 72 72 6f 72 20 6f  WarnWin "Error o
2aa0: 70 65 6e 69 6e 67 20 70 72 6f 6a 65 63 74 20 27  pening project '
2ab0: 24 66 69 6c 65 27 20 28 24 65 72 72 73 74 72 69  $file' ($errstri
2ac0: 6e 67 29 22 20 24 77 0a 09 72 65 74 75 72 6e 0a  ng)" $w..return.
2ad0: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 20 5b      }.    if { [
2ae0: 61 72 72 61 79 20 65 78 69 73 74 73 20 64 61 74  array exists dat
2af0: 61 5d 20 7d 20 7b 0a 09 23 20 75 70 67 72 61 64  a] } {..# upgrad
2b00: 65 20 6f 6c 64 20 76 65 72 73 69 6f 6e 73 0a 09  e old versions..
2b10: 73 65 74 20 6c 69 6e 6b 73 20 4c 69 6e 6b 0a 09  set links Link..
2b20: 66 6f 72 65 61 63 68 20 69 20 5b 61 72 72 61 79  foreach i [array
2b30: 20 6e 61 6d 65 73 20 64 61 74 61 5d 20 7b 0a 09   names data] {..
2b40: 20 20 20 20 69 66 20 7b 20 5b 72 65 67 65 78 70      if { [regexp
2b50: 20 7b 28 6c 69 62 72 61 72 69 65 73 64 69 72 73   {(librariesdirs
2b60: 7c 6c 69 62 72 61 72 69 65 73 7c 6c 69 6e 6b 66  |libraries|linkf
2b70: 6c 61 67 73 29 24 7d 20 24 69 5d 20 7d 20 7b 0a  lags)$} $i] } {.
2b80: 09 09 72 65 67 65 78 70 20 7b 5e 28 5b 5e 2c 5d  ..regexp {^([^,]
2b90: 2b 29 2c 28 2e 2a 29 7d 20 24 69 20 7b 7d 20 64  +),(.*)} $i {} d
2ba0: 72 20 72 20 0a 09 09 73 65 74 20 64 61 74 61 4c  r r ...set dataL
2bb0: 28 24 64 72 2c 4c 69 6e 6b 2c 24 72 29 20 24 64  ($dr,Link,$r) $d
2bc0: 61 74 61 28 24 69 29 0a 09 20 20 20 20 7d 20 65  ata($i)..    } e
2bd0: 6c 73 65 69 66 20 7b 20 5b 72 65 67 65 78 70 20  lseif { [regexp 
2be0: 7b 28 65 78 65 63 64 69 72 7c 65 78 65 7c 65 78  {(execdir|exe|ex
2bf0: 65 61 72 67 73 29 24 7d 20 24 69 5d 20 7d 20 7b  eargs)$} $i] } {
2c00: 0a 09 09 73 65 74 20 64 61 74 61 45 28 24 69 29  ...set dataE($i)
2c10: 20 24 64 61 74 61 28 24 69 29 0a 09 20 20 20 20   $data($i)..    
2c20: 7d 20 65 6c 73 65 20 7b 20 73 65 74 20 64 61 74  } else { set dat
2c30: 61 43 28 24 69 29 20 24 64 61 74 61 28 24 69 29  aC($i) $data($i)
2c40: 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20   }..}.    }.    
2c50: 23 20 74 6f 20 61 63 74 69 76 61 74 65 20 74 68  # to activate th
2c60: 65 20 74 72 61 63 65 0a 20 20 20 20 73 65 74 20  e trace.    set 
2c70: 67 72 6f 75 70 62 65 66 6f 72 65 20 22 22 0a 20  groupbefore "". 
2c80: 20 20 20 73 65 74 20 64 65 62 75 67 72 65 6c 65     set debugrele
2c90: 61 73 65 62 65 66 6f 72 65 20 22 22 0a 0a 20 20  asebefore ""..  
2ca0: 20 20 74 72 61 63 65 20 76 61 72 20 3a 3a 63 70    trace var ::cp
2cb0: 72 6f 6a 65 63 74 3a 3a 67 72 6f 75 70 20 77 20  roject::group w 
2cc0: 22 63 70 72 6f 6a 65 63 74 3a 3a 53 65 74 47 72  "cproject::SetGr
2cd0: 6f 75 70 41 63 74 69 76 65 3b 23 22 0a 20 20 20  oupActive;#".   
2ce0: 20 74 72 61 63 65 20 76 61 72 20 3a 3a 63 70 72   trace var ::cpr
2cf0: 6f 6a 65 63 74 3a 3a 64 65 62 75 67 72 65 6c 65  oject::debugrele
2d00: 61 73 65 20 77 20 22 63 70 72 6f 6a 65 63 74 3a  ase w "cproject:
2d10: 3a 53 65 74 44 65 62 75 67 52 65 6c 65 61 73 65  :SetDebugRelease
2d20: 41 63 74 69 76 65 3b 23 22 0a 20 20 20 20 74 72  Active;#".    tr
2d30: 61 63 65 20 76 61 72 20 3a 3a 63 70 72 6f 6a 65  ace var ::cproje
2d40: 63 74 3a 3a 6c 69 6e 6b 73 20 77 20 22 55 70 64  ct::links w "Upd
2d50: 61 74 65 4c 69 6e 6b 74 61 62 73 20 3b 23 22 0a  ateLinktabs ;#".
2d60: 20 20 20 20 74 72 61 63 65 20 76 61 72 20 3a 3a      trace var ::
2d70: 63 70 72 6f 6a 65 63 74 3a 3a 73 63 72 69 70 74  cproject::script
2d80: 74 61 62 73 20 77 20 22 55 70 64 61 74 65 53 63  tabs w "UpdateSc
2d90: 72 69 70 74 74 61 62 73 20 3b 23 22 0a 20 20 20  ripttabs ;#".   
2da0: 0a 20 20 20 20 73 65 74 20 6c 69 6e 6b 73 20 24  .    set links $
2db0: 6c 69 6e 6b 73 0a 20 20 20 20 73 65 74 20 73 63  links.    set sc
2dc0: 72 69 70 74 74 61 62 73 20 24 73 63 72 69 70 74  ripttabs $script
2dd0: 74 61 62 73 0a 0a 20 20 20 20 73 65 74 20 67 72  tabs..    set gr
2de0: 6f 75 70 20 24 67 72 6f 75 70 0a 0a 20 20 20 20  oup $group..    
2df0: 73 65 74 20 67 72 6f 75 70 62 65 66 6f 72 65 20  set groupbefore 
2e00: 24 67 72 6f 75 70 0a 20 20 20 20 73 65 74 20 64  $group.    set d
2e10: 65 62 75 67 72 65 6c 65 61 73 65 62 65 66 6f 72  ebugreleasebefor
2e20: 65 20 24 64 65 62 75 67 72 65 6c 65 61 73 65 0a  e $debugrelease.
2e30: 0a 20 20 20 20 69 66 20 7b 20 5b 52 61 6d 44 65  .    if { [RamDe
2e40: 62 75 67 67 65 72 3a 3a 6c 73 65 61 72 63 68 66  bugger::lsearchf
2e50: 69 6c 65 20 24 52 61 6d 44 65 62 75 67 67 65 72  ile $RamDebugger
2e60: 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65 6e 74  ::options(recent
2e70: 70 72 6f 6a 65 63 74 73 29 20 24 70 72 6f 6a 65  projects) $proje
2e80: 63 74 5d 20 21 3d 20 2d 31 20 7d 20 7b 0a 09 73  ct] != -1 } {..s
2e90: 65 74 20 69 70 6f 73 20 5b 52 61 6d 44 65 62 75  et ipos [RamDebu
2ea0: 67 67 65 72 3a 3a 6c 73 65 61 72 63 68 66 69 6c  gger::lsearchfil
2eb0: 65 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a 3a  e $RamDebugger::
2ec0: 6f 70 74 69 6f 6e 73 28 72 65 63 65 6e 74 70 72  options(recentpr
2ed0: 6f 6a 65 63 74 73 29 20 24 70 72 6f 6a 65 63 74  ojects) $project
2ee0: 5d 0a 09 73 65 74 20 52 61 6d 44 65 62 75 67 67  ]..set RamDebugg
2ef0: 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65  er::options(rece
2f00: 6e 74 70 72 6f 6a 65 63 74 73 29 20 5b 6c 72 65  ntprojects) [lre
2f10: 70 6c 61 63 65 20 24 52 61 6d 44 65 62 75 67 67  place $RamDebugg
2f20: 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65  er::options(rece
2f30: 6e 74 70 72 6f 6a 65 63 74 73 29 20 5c 0a 09 09  ntprojects) \...
2f40: 24 69 70 6f 73 20 24 69 70 6f 73 5d 0a 20 20 20  $ipos $ipos].   
2f50: 20 7d 0a 20 20 20 20 73 65 74 20 52 61 6d 44 65   }.    set RamDe
2f60: 62 75 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28  bugger::options(
2f70: 72 65 63 65 6e 74 70 72 6f 6a 65 63 74 73 29 20  recentprojects) 
2f80: 5b 6c 69 6e 73 65 72 74 20 24 52 61 6d 44 65 62  [linsert $RamDeb
2f90: 75 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72  ugger::options(r
2fa0: 65 63 65 6e 74 70 72 6f 6a 65 63 74 73 29 20 5c  ecentprojects) \
2fb0: 0a 09 20 20 20 20 30 20 24 70 72 6f 6a 65 63 74  ..    0 $project
2fc0: 5d 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65  ].}..proc cproje
2fd0: 63 74 3a 3a 53 61 76 65 50 72 6f 6a 65 63 74 20  ct::SaveProject 
2fe0: 7b 20 77 20 7d 20 7b 0a 20 20 20 20 76 61 72 69  { w } {.    vari
2ff0: 61 62 6c 65 20 70 72 6f 6a 65 63 74 0a 20 20 20  able project.   
3000: 20 73 65 74 20 74 79 70 65 73 20 7b 0a 09 7b 7b   set types {..{{
3010: 50 72 6f 6a 65 63 74 20 66 69 6c 65 73 7d 20 20  Project files}  
3020: 20 20 20 20 7b 2e 70 72 6a 7d 20 20 20 7d 0a 09      {.prj}   }..
3030: 7b 7b 41 6c 6c 20 46 69 6c 65 73 7d 20 20 20 20  {{All Files}    
3040: 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 7d      *          }
3050: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 64  .    }.    set d
3060: 69 72 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a  ir $RamDebugger:
3070: 3a 6f 70 74 69 6f 6e 73 28 64 65 66 61 75 6c 74  :options(default
3080: 64 69 72 29 0a 0a 20 20 20 20 73 65 74 20 66 69  dir)..    set fi
3090: 6c 65 20 5b 74 6b 5f 67 65 74 53 61 76 65 46 69  le [tk_getSaveFi
30a0: 6c 65 20 2d 66 69 6c 65 74 79 70 65 73 20 24 74  le -filetypes $t
30b0: 79 70 65 73 20 2d 69 6e 69 74 69 61 6c 64 69 72  ypes -initialdir
30c0: 20 24 64 69 72 20 2d 70 61 72 65 6e 74 20 24 77   $dir -parent $w
30d0: 20 5c 0a 09 2d 74 69 74 6c 65 20 22 53 61 76 65   \..-title "Save
30e0: 20 70 72 6f 6a 65 63 74 22 20 2d 64 65 66 61 75   project" -defau
30f0: 6c 74 65 78 74 65 6e 73 69 6f 6e 20 2e 70 72 6a  ltextension .prj
3100: 5d 0a 20 20 20 20 69 66 20 7b 20 24 66 69 6c 65  ].    if { $file
3110: 20 3d 3d 20 22 22 20 7d 20 7b 20 72 65 74 75 72   == "" } { retur
3120: 6e 20 7d 0a 0a 20 20 20 20 23 73 65 74 20 52 61  n }..    #set Ra
3130: 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74 69 6f  mDebugger::optio
3140: 6e 73 28 64 65 66 61 75 6c 74 64 69 72 29 20 5b  ns(defaultdir) [
3150: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 66 69  file dirname $fi
3160: 6c 65 5d 0a 20 20 20 20 0a 20 20 20 20 73 65 74  le].    .    set
3170: 20 70 72 6f 6a 65 63 74 20 24 66 69 6c 65 0a 20   project $file. 
3180: 20 20 20 53 61 76 65 50 72 6f 6a 65 63 74 43 20     SaveProjectC 
3190: 24 77 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a  $w.}..proc cproj
31a0: 65 63 74 3a 3a 53 65 74 47 72 6f 75 70 41 63 74  ect::SetGroupAct
31b0: 69 76 65 20 7b 7d 20 7b 0a 20 20 20 20 76 61 72  ive {} {.    var
31c0: 69 61 62 6c 65 20 67 72 6f 75 70 62 65 66 6f 72  iable groupbefor
31d0: 65 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 67  e.    variable g
31e0: 72 6f 75 70 0a 20 20 20 20 76 61 72 69 61 62 6c  roup.    variabl
31f0: 65 20 64 65 62 75 67 72 65 6c 65 61 73 65 0a 20  e debugrelease. 
3200: 20 20 20 76 61 72 69 61 62 6c 65 20 74 68 69 73     variable this
3210: 64 61 74 61 0a 20 20 20 20 76 61 72 69 61 62 6c  data.    variabl
3220: 65 20 64 61 74 61 0a 0a 20 20 20 20 73 65 74 20  e data..    set 
3230: 64 69 72 20 5b 49 73 50 72 6f 6a 65 63 74 4e 61  dir [IsProjectNa
3240: 6d 65 4f 6b 5d 0a 0a 20 20 20 20 73 79 6e 63 66  meOk]..    syncf
3250: 72 6f 6d 55 49 0a 0a 20 20 20 20 73 65 74 20 67  romUI..    set g
3260: 72 6f 75 70 62 65 66 6f 72 65 20 24 67 72 6f 75  roupbefore $grou
3270: 70 0a 20 20 20 20 73 79 6e 63 74 6f 55 49 0a 7d  p.    synctoUI.}
3280: 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a  ..proc cproject:
3290: 3a 53 65 74 44 65 62 75 67 52 65 6c 65 61 73 65  :SetDebugRelease
32a0: 41 63 74 69 76 65 20 7b 7d 20 7b 0a 20 20 20 20  Active {} {.    
32b0: 76 61 72 69 61 62 6c 65 20 64 65 62 75 67 72 65  variable debugre
32c0: 6c 65 61 73 65 62 65 66 6f 72 65 0a 20 20 20 20  leasebefore.    
32d0: 76 61 72 69 61 62 6c 65 20 64 65 62 75 67 72 65  variable debugre
32e0: 6c 65 61 73 65 0a 20 20 20 20 76 61 72 69 61 62  lease.    variab
32f0: 6c 65 20 74 68 69 73 64 61 74 61 0a 20 20 20 20  le thisdata.    
3300: 76 61 72 69 61 62 6c 65 20 64 61 74 61 0a 0a 20  variable data.. 
3310: 20 20 20 73 65 74 20 64 69 72 20 5b 49 73 50 72     set dir [IsPr
3320: 6f 6a 65 63 74 4e 61 6d 65 4f 6b 5d 0a 20 20 20  ojectNameOk].   
3330: 20 73 79 6e 63 66 72 6f 6d 55 49 0a 20 20 20 20   syncfromUI.    
3340: 73 65 74 20 64 65 62 75 67 72 65 6c 65 61 73 65  set debugrelease
3350: 62 65 66 6f 72 65 20 24 64 65 62 75 67 72 65 6c  before $debugrel
3360: 65 61 73 65 0a 20 20 20 20 73 79 6e 63 74 6f 55  ease.    synctoU
3370: 49 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65  I.}..proc cproje
3380: 63 74 3a 3a 43 72 65 61 74 65 4d 6f 64 69 66 79  ct::CreateModify
3390: 47 72 6f 75 70 20 7b 20 77 20 77 68 61 74 20 7d  Group { w what }
33a0: 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   {.    variable 
33b0: 67 72 6f 75 70 0a 20 20 20 20 76 61 72 69 61 62  group.    variab
33c0: 6c 65 20 67 72 6f 75 70 73 0a 20 20 20 20 76 61  le groups.    va
33d0: 72 69 61 62 6c 65 20 66 69 6c 65 73 0a 20 20 20  riable files.   
33e0: 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 43 0a   variable dataC.
33f0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 67 72 6f      variable gro
3400: 75 70 62 65 66 6f 72 65 0a 0a 20 20 20 20 73 65  upbefore..    se
3410: 74 20 64 69 72 20 5b 49 73 50 72 6f 6a 65 63 74  t dir [IsProject
3420: 4e 61 6d 65 4f 6b 5d 0a 20 20 20 20 73 79 6e 63  NameOk].    sync
3430: 66 72 6f 6d 55 49 0a 0a 20 20 20 20 69 66 20 7b  fromUI..    if {
3440: 20 24 77 68 61 74 20 3d 3d 20 22 64 65 6c 65 74   $what == "delet
3450: 65 22 20 7d 20 7b 0a 09 69 66 20 7b 20 24 67 72  e" } {..if { $gr
3460: 6f 75 70 20 3d 3d 20 22 41 6c 6c 22 20 7d 20 7b  oup == "All" } {
3470: 0a 09 20 20 20 20 57 61 72 6e 57 69 6e 20 22 47  ..    WarnWin "G
3480: 72 6f 75 70 20 27 41 6c 6c 27 20 63 61 6e 6e 6f  roup 'All' canno
3490: 74 20 62 65 20 64 65 6c 65 74 65 64 22 20 24 77  t be deleted" $w
34a0: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a  ..    return..}.
34b0: 09 73 65 74 20 72 65 74 20 5b 44 69 61 6c 6f 67  .set ret [Dialog
34c0: 57 69 6e 3a 3a 6d 65 73 73 61 67 65 42 6f 78 20  Win::messageBox 
34d0: 2d 64 65 66 61 75 6c 74 20 6f 6b 20 2d 69 63 6f  -default ok -ico
34e0: 6e 20 77 61 72 6e 69 6e 67 20 2d 6d 65 73 73 61  n warning -messa
34f0: 67 65 20 5c 0a 09 20 20 20 20 22 41 72 65 20 79  ge \..    "Are y
3500: 6f 75 20 73 75 72 65 20 74 6f 20 64 65 6c 65 74  ou sure to delet
3510: 65 20 67 72 6f 75 70 20 27 24 67 72 6f 75 70 27  e group '$group'
3520: 3f 22 20 2d 70 61 72 65 6e 74 20 24 77 20 5c 0a  ?" -parent $w \.
3530: 09 20 20 20 20 2d 74 69 74 6c 65 20 22 64 65 6c  .    -title "del
3540: 65 74 65 20 67 72 6f 75 70 22 20 2d 74 79 70 65  ete group" -type
3550: 20 6f 6b 63 61 6e 63 65 6c 5d 0a 09 69 66 20 7b   okcancel]..if {
3560: 20 24 72 65 74 20 3d 3d 20 22 63 61 6e 63 65 6c   $ret == "cancel
3570: 22 20 7d 20 7b 20 72 65 74 75 72 6e 20 7d 0a 09  " } { return }..
3580: 0a 09 66 6f 72 20 7b 20 73 65 74 20 69 20 30 20  ..for { set i 0 
3590: 7d 20 7b 20 24 69 20 3c 20 5b 6c 6c 65 6e 67 74  } { $i < [llengt
35a0: 68 20 24 66 69 6c 65 73 5d 20 7d 20 7b 20 69 6e  h $files] } { in
35b0: 63 72 20 69 20 7d 20 7b 0a 09 20 20 20 20 66 6f  cr i } {..    fo
35c0: 72 65 61 63 68 20 22 66 69 6c 65 20 74 79 70 65  reach "file type
35d0: 20 67 72 6f 75 70 5f 69 6e 20 70 61 74 68 22 20   group_in path" 
35e0: 5b 6c 69 6e 64 65 78 20 24 66 69 6c 65 73 20 24  [lindex $files $
35f0: 69 5d 20 62 72 65 61 6b 0a 09 20 20 20 20 69 66  i] break..    if
3600: 20 7b 20 24 67 72 6f 75 70 20 3d 3d 20 24 67 72   { $group == $gr
3610: 6f 75 70 5f 69 6e 20 7d 20 7b 0a 09 09 73 65 74  oup_in } {...set
3620: 20 66 69 6c 65 73 20 5b 6c 72 65 70 6c 61 63 65   files [lreplace
3630: 20 24 66 69 6c 65 73 20 24 69 20 24 69 20 5b 6c   $files $i $i [l
3640: 69 73 74 20 24 66 69 6c 65 20 24 74 79 70 65 20  ist $file $type 
3650: 41 6c 6c 20 24 70 61 74 68 5d 5d 0a 09 20 20 20  All $path]]..   
3660: 20 7d 0a 09 7d 0a 09 73 65 74 20 69 70 6f 73 20   }..}..set ipos 
3670: 5b 6c 73 65 61 72 63 68 20 24 67 72 6f 75 70 73  [lsearch $groups
3680: 20 24 67 72 6f 75 70 5d 0a 09 73 65 74 20 67 72   $group]..set gr
3690: 6f 75 70 73 20 5b 6c 72 65 70 6c 61 63 65 20 24  oups [lreplace $
36a0: 67 72 6f 75 70 73 20 24 69 70 6f 73 20 24 69 70  groups $ipos $ip
36b0: 6f 73 5d 0a 09 66 6f 72 65 61 63 68 20 69 20 5b  os]..foreach i [
36c0: 61 72 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61  array names data
36d0: 43 20 24 67 72 6f 75 70 2c 2a 5d 20 7b 0a 09 20  C $group,*] {.. 
36e0: 20 20 20 75 6e 73 65 74 20 64 61 74 61 43 28 24     unset dataC($
36f0: 69 29 0a 09 7d 0a 09 73 65 74 20 67 72 6f 75 70  i)..}..set group
3700: 62 65 66 6f 72 65 20 22 22 0a 09 73 65 74 20 67  before ""..set g
3710: 72 6f 75 70 20 41 6c 6c 0a 09 72 65 74 75 72 6e  roup All..return
3720: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 43 6f 70 79  .    }..    Copy
3730: 4e 61 6d 65 73 70 61 63 65 20 3a 3a 44 69 61 6c  Namespace ::Dial
3740: 6f 67 57 69 6e 20 3a 3a 44 69 61 6c 6f 67 57 69  ogWin ::DialogWi
3750: 6e 43 52 0a 0a 20 20 20 20 73 77 69 74 63 68 20  nCR..    switch 
3760: 24 77 68 61 74 20 7b 0a 09 63 72 65 61 74 65 20  $what {..create 
3770: 7b 0a 09 20 20 20 20 73 65 74 20 74 69 74 6c 65  {..    set title
3780: 20 22 4e 65 77 20 67 72 6f 75 70 22 0a 09 20 20   "New group"..  
3790: 20 20 73 65 74 20 6c 61 62 65 6c 20 22 45 6e 74    set label "Ent
37a0: 65 72 20 6e 65 77 20 67 72 6f 75 70 20 6e 61 6d  er new group nam
37b0: 65 22 0a 09 7d 0a 09 72 65 6e 61 6d 65 20 7b 0a  e"..}..rename {.
37c0: 09 20 20 20 20 73 65 74 20 74 69 74 6c 65 20 22  .    set title "
37d0: 52 65 6e 61 6d 65 20 67 72 6f 75 70 22 0a 09 20  Rename group".. 
37e0: 20 20 20 73 65 74 20 6c 61 62 65 6c 20 22 45 6e     set label "En
37f0: 74 65 72 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72  ter new name for
3800: 20 67 72 6f 75 70 20 27 24 67 72 6f 75 70 27 22   group '$group'"
3810: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  ..}.    }..    s
3820: 65 74 20 66 20 5b 44 69 61 6c 6f 67 57 69 6e 43  et f [DialogWinC
3830: 52 3a 3a 49 6e 69 74 20 24 77 20 24 74 69 74 6c  R::Init $w $titl
3840: 65 20 73 65 70 61 72 61 74 6f 72 20 22 22 5d 0a  e separator ""].
3850: 20 20 20 20 73 65 74 20 77 20 5b 77 69 6e 66 6f      set w [winfo
3860: 20 74 6f 70 6c 65 76 65 6c 20 24 66 5d 0a 0a 20   toplevel $f].. 
3870: 20 20 20 6c 61 62 65 6c 20 24 66 2e 6c 20 2d 74     label $f.l -t
3880: 65 78 74 20 24 6c 61 62 65 6c 20 2d 67 72 69 64  ext $label -grid
3890: 20 22 30 20 70 78 33 20 70 79 33 22 0a 20 20 20   "0 px3 py3".   
38a0: 20 65 6e 74 72 79 20 24 66 2e 65 20 2d 74 65 78   entry $f.e -tex
38b0: 74 76 61 72 69 61 62 6c 65 20 44 69 61 6c 6f 67  tvariable Dialog
38c0: 57 69 6e 43 52 3a 3a 75 73 65 72 28 6e 61 6d 65  WinCR::user(name
38d0: 29 20 2d 67 72 69 64 20 22 30 20 70 78 31 30 20  ) -grid "0 px10 
38e0: 70 79 33 22 20 2d 77 69 64 74 68 20 33 30 0a 0a  py3" -width 30..
38f0: 20 20 20 20 73 65 74 20 44 69 61 6c 6f 67 57 69      set DialogWi
3900: 6e 43 52 3a 3a 75 73 65 72 28 6e 61 6d 65 29 20  nCR::user(name) 
3910: 24 67 72 6f 75 70 0a 20 20 20 20 74 6b 54 61 62  $group.    tkTab
3920: 54 6f 57 69 6e 64 6f 77 20 24 66 2e 65 0a 0a 20  ToWindow $f.e.. 
3930: 20 20 20 73 75 70 65 72 67 72 69 64 3a 3a 67 6f     supergrid::go
3940: 20 24 66 0a 0a 20 20 20 20 62 69 6e 64 20 24 77   $f..    bind $w
3950: 20 3c 52 65 74 75 72 6e 3e 20 22 44 69 61 6c 6f   <Return> "Dialo
3960: 67 57 69 6e 43 52 3a 3a 49 6e 76 6f 6b 65 4f 4b  gWinCR::InvokeOK
3970: 22 0a 0a 20 20 20 20 73 65 74 20 61 63 74 69 6f  "..    set actio
3980: 6e 20 5b 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a  n [DialogWinCR::
3990: 43 72 65 61 74 65 57 69 6e 64 6f 77 5d 0a 20 20  CreateWindow].  
39a0: 20 20 77 68 69 6c 65 20 31 20 7b 0a 09 73 77 69    while 1 {..swi
39b0: 74 63 68 20 24 61 63 74 69 6f 6e 20 7b 0a 09 20  tch $action {.. 
39c0: 20 20 20 30 20 7b 0a 09 09 44 69 61 6c 6f 67 57     0 {...DialogW
39d0: 69 6e 43 52 3a 3a 44 65 73 74 72 6f 79 57 69 6e  inCR::DestroyWin
39e0: 64 6f 77 0a 09 09 6e 61 6d 65 73 70 61 63 65 20  dow...namespace 
39f0: 64 65 6c 65 74 65 20 3a 3a 44 69 61 6c 6f 67 57  delete ::DialogW
3a00: 69 6e 43 52 0a 09 09 72 65 74 75 72 6e 0a 09 20  inCR...return.. 
3a10: 20 20 20 7d 0a 09 20 20 20 20 31 20 7b 0a 09 09     }..    1 {...
3a20: 69 66 20 7b 20 5b 73 74 72 69 6e 67 20 74 72 69  if { [string tri
3a30: 6d 20 24 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a  m $DialogWinCR::
3a40: 75 73 65 72 28 6e 61 6d 65 29 5d 20 3d 3d 20 22  user(name)] == "
3a50: 22 20 7d 20 7b 0a 09 09 20 20 20 20 57 61 72 6e  " } {...    Warn
3a60: 57 69 6e 20 22 47 72 6f 75 70 20 6e 61 6d 65 20  Win "Group name 
3a70: 63 61 6e 6e 6f 74 20 62 65 20 76 6f 69 64 22 20  cannot be void" 
3a80: 24 77 0a 09 09 7d 20 65 6c 73 65 69 66 20 7b 20  $w...} elseif { 
3a90: 5b 6c 73 65 61 72 63 68 20 24 67 72 6f 75 70 73  [lsearch $groups
3aa0: 20 24 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a 75   $DialogWinCR::u
3ab0: 73 65 72 28 6e 61 6d 65 29 5d 20 21 3d 20 2d 31  ser(name)] != -1
3ac0: 20 7d 20 7b 0a 09 09 20 20 20 20 57 61 72 6e 57   } {...    WarnW
3ad0: 69 6e 20 22 47 72 6f 75 70 20 6e 61 6d 65 20 61  in "Group name a
3ae0: 6c 72 65 61 64 79 20 65 78 69 73 74 73 22 20 24  lready exists" $
3af0: 77 0a 09 09 7d 20 65 6c 73 65 69 66 20 7b 20 21  w...} elseif { !
3b00: 5b 73 74 72 69 6e 67 20 69 73 20 77 6f 72 64 63  [string is wordc
3b10: 68 61 72 20 24 44 69 61 6c 6f 67 57 69 6e 43 52  har $DialogWinCR
3b20: 3a 3a 75 73 65 72 28 6e 61 6d 65 29 5d 20 7d 20  ::user(name)] } 
3b30: 7b 0a 09 09 20 20 20 20 57 61 72 6e 57 69 6e 20  {...    WarnWin 
3b40: 22 47 72 6f 75 70 20 6e 61 6d 65 20 69 73 20 6e  "Group name is n
3b50: 6f 74 20 4f 4b 22 20 24 77 0a 09 09 7d 20 65 6c  ot OK" $w...} el
3b60: 73 65 20 7b 0a 09 09 20 20 20 20 73 65 74 20 6e  se {...    set n
3b70: 65 77 6e 61 6d 65 20 24 44 69 61 6c 6f 67 57 69  ewname $DialogWi
3b80: 6e 43 52 3a 3a 75 73 65 72 28 6e 61 6d 65 29 0a  nCR::user(name).
3b90: 09 09 20 20 20 20 44 69 61 6c 6f 67 57 69 6e 43  ..    DialogWinC
3ba0: 52 3a 3a 44 65 73 74 72 6f 79 57 69 6e 64 6f 77  R::DestroyWindow
3bb0: 0a 09 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
3bc0: 20 64 65 6c 65 74 65 20 3a 3a 44 69 61 6c 6f 67   delete ::Dialog
3bd0: 57 69 6e 43 52 0a 09 09 20 20 20 20 62 72 65 61  WinCR...    brea
3be0: 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a  k...}..    }..}.
3bf0: 09 73 65 74 20 61 63 74 69 6f 6e 20 5b 44 69 61  .set action [Dia
3c00: 6c 6f 67 57 69 6e 43 52 3a 3a 57 61 69 74 46 6f  logWinCR::WaitFo
3c10: 72 57 69 6e 64 6f 77 5d 0a 20 20 20 20 7d 0a 0a  rWindow].    }..
3c20: 20 20 20 20 69 66 20 7b 20 24 77 68 61 74 20 3d      if { $what =
3c30: 3d 20 22 72 65 6e 61 6d 65 22 20 7d 20 7b 0a 09  = "rename" } {..
3c40: 66 6f 72 20 7b 20 73 65 74 20 69 20 30 20 7d 20  for { set i 0 } 
3c50: 7b 20 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20  { $i < [llength 
3c60: 24 66 69 6c 65 73 5d 20 7d 20 7b 20 69 6e 63 72  $files] } { incr
3c70: 20 69 20 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65   i } {..    fore
3c80: 61 63 68 20 22 66 69 6c 65 20 74 79 70 65 20 67  ach "file type g
3c90: 72 6f 75 70 5f 69 6e 20 70 61 74 68 22 20 5b 6c  roup_in path" [l
3ca0: 69 6e 64 65 78 20 24 66 69 6c 65 73 20 24 69 5d  index $files $i]
3cb0: 20 62 72 65 61 6b 0a 09 20 20 20 20 69 66 20 7b   break..    if {
3cc0: 20 24 67 72 6f 75 70 20 3d 3d 20 24 67 72 6f 75   $group == $grou
3cd0: 70 5f 69 6e 20 7d 20 7b 0a 09 09 73 65 74 20 66  p_in } {...set f
3ce0: 69 6c 65 73 20 5b 6c 72 65 70 6c 61 63 65 20 24  iles [lreplace $
3cf0: 66 69 6c 65 73 20 24 69 20 24 69 20 5b 6c 69 73  files $i $i [lis
3d00: 74 20 24 66 69 6c 65 20 24 74 79 70 65 20 24 6e  t $file $type $n
3d10: 65 77 6e 61 6d 65 20 24 70 61 74 68 5d 5d 0a 09  ewname $path]]..
3d20: 20 20 20 20 7d 0a 09 7d 0a 09 73 65 74 20 69 70      }..}..set ip
3d30: 6f 73 20 5b 6c 73 65 61 72 63 68 20 24 67 72 6f  os [lsearch $gro
3d40: 75 70 73 20 24 67 72 6f 75 70 5d 0a 09 73 65 74  ups $group]..set
3d50: 20 67 72 6f 75 70 73 20 5b 6c 72 65 70 6c 61 63   groups [lreplac
3d60: 65 20 24 67 72 6f 75 70 73 20 24 69 70 6f 73 20  e $groups $ipos 
3d70: 24 69 70 6f 73 20 24 6e 65 77 6e 61 6d 65 5d 0a  $ipos $newname].
3d80: 09 66 6f 72 65 61 63 68 20 69 20 5b 61 72 72 61  .foreach i [arra
3d90: 79 20 6e 61 6d 65 73 20 64 61 74 61 43 20 24 67  y names dataC $g
3da0: 72 6f 75 70 2c 2a 5d 20 7b 0a 09 20 20 20 20 72  roup,*] {..    r
3db0: 65 67 65 78 70 20 7b 2c 28 2e 2a 29 7d 20 24 69  egexp {,(.*)} $i
3dc0: 20 7b 7d 20 72 65 73 74 0a 09 20 20 20 20 73 65   {} rest..    se
3dd0: 74 20 64 61 74 61 43 28 24 6e 65 77 6e 61 6d 65  t dataC($newname
3de0: 2c 24 72 65 73 74 29 20 24 64 61 74 61 43 28 24  ,$rest) $dataC($
3df0: 69 29 0a 09 20 20 20 20 75 6e 73 65 74 20 64 61  i)..    unset da
3e00: 74 61 43 28 24 69 29 0a 09 7d 0a 20 20 20 20 7d  taC($i)..}.    }
3e10: 20 65 6c 73 65 20 7b 0a 09 6c 61 70 70 65 6e 64   else {..lappend
3e20: 20 67 72 6f 75 70 73 20 24 6e 65 77 6e 61 6d 65   groups $newname
3e30: 0a 09 66 6f 72 65 61 63 68 20 69 20 5b 61 72 72  ..foreach i [arr
3e40: 61 79 20 6e 61 6d 65 73 20 64 61 74 61 43 20 41  ay names dataC A
3e50: 6c 6c 2c 2a 5d 20 7b 0a 09 20 20 20 20 72 65 67  ll,*] {..    reg
3e60: 65 78 70 20 7b 2c 28 2e 2a 29 7d 20 24 69 20 7b  exp {,(.*)} $i {
3e70: 7d 20 72 65 73 74 0a 09 20 20 20 20 73 65 74 20  } rest..    set 
3e80: 64 61 74 61 43 28 24 6e 65 77 6e 61 6d 65 2c 24  dataC($newname,$
3e90: 72 65 73 74 29 20 24 64 61 74 61 43 28 24 69 29  rest) $dataC($i)
3ea0: 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  ..}.    }.    se
3eb0: 74 20 67 72 6f 75 70 62 65 66 6f 72 65 20 22 22  t groupbefore ""
3ec0: 0a 20 20 20 20 73 65 74 20 67 72 6f 75 70 20 24  .    set group $
3ed0: 6e 65 77 6e 61 6d 65 0a 0a 7d 0a 0a 70 72 6f 63  newname..}..proc
3ee0: 20 63 70 72 6f 6a 65 63 74 3a 3a 43 72 65 61 74   cproject::Creat
3ef0: 65 44 6f 20 7b 20 77 68 61 74 20 66 20 7d 20 7b  eDo { what f } {
3f00: 0a 0a 20 20 20 20 73 65 74 20 77 20 5b 77 69 6e  ..    set w [win
3f10: 66 6f 20 74 6f 70 6c 65 76 65 6c 20 24 66 5d 0a  fo toplevel $f].
3f20: 20 20 20 20 73 77 69 74 63 68 20 24 77 68 61 74      switch $what
3f30: 20 7b 0a 09 4f 6b 20 7b 0a 09 20 20 20 20 53 61   {..Ok {..    Sa
3f40: 76 65 50 72 6f 6a 65 63 74 43 20 24 77 0a 09 20  veProjectC $w.. 
3f50: 20 20 20 64 65 73 74 72 6f 79 20 24 77 0a 09 7d     destroy $w..}
3f60: 0a 09 41 70 70 6c 79 20 7b 0a 09 20 20 20 20 53  ..Apply {..    S
3f70: 61 76 65 50 72 6f 6a 65 63 74 43 20 24 77 0a 09  aveProjectC $w..
3f80: 7d 0a 09 43 61 6e 63 65 6c 20 7b 20 64 65 73 74  }..Cancel { dest
3f90: 72 6f 79 20 24 77 20 7d 0a 20 20 20 20 7d 0a 7d  roy $w }.    }.}
3fa0: 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a  ..proc cproject:
3fb0: 3a 43 72 65 61 74 65 20 7b 20 70 61 72 20 7d 20  :Create { par } 
3fc0: 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e  {.    variable n
3fd0: 6f 74 65 62 6f 6f 6b 0a 0a 20 20 20 20 69 66 20  otebook..    if 
3fe0: 7b 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  { ![info exists 
3ff0: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74  RamDebugger::opt
4000: 69 6f 6e 73 28 72 65 63 65 6e 74 70 72 6f 6a 65  ions(recentproje
4010: 63 74 73 29 5d 20 7d 20 7b 0a 09 73 65 74 20 52  cts)] } {..set R
4020: 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74 69  amDebugger::opti
4030: 6f 6e 73 28 72 65 63 65 6e 74 70 72 6f 6a 65 63  ons(recentprojec
4040: 74 73 29 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20  ts) "".    }..  
4050: 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 73 20 5b    set commands [
4060: 6c 69 73 74 20 22 63 70 72 6f 6a 65 63 74 3a 3a  list "cproject::
4070: 43 72 65 61 74 65 44 6f 20 4f 6b 22 20 22 63 70  CreateDo Ok" "cp
4080: 72 6f 6a 65 63 74 3a 3a 43 72 65 61 74 65 44 6f  roject::CreateDo
4090: 20 41 70 70 6c 79 22 20 5c 0a 09 09 20 20 20 20   Apply" \...    
40a0: 20 20 22 63 70 72 6f 6a 65 63 74 3a 3a 43 72 65    "cproject::Cre
40b0: 61 74 65 44 6f 20 43 61 6e 63 65 6c 22 5d 0a 0a  ateDo Cancel"]..
40c0: 20 20 20 20 73 65 74 20 66 20 5b 44 69 61 6c 6f      set f [Dialo
40d0: 67 57 69 6e 54 6f 70 3a 3a 49 6e 69 74 20 24 70  gWinTop::Init $p
40e0: 61 72 20 22 43 2b 2b 20 63 6f 6d 70 69 6c 61 74  ar "C++ compilat
40f0: 69 6f 6e 20 70 72 6f 6a 65 63 74 22 20 73 65 70  ion project" sep
4100: 61 72 61 74 6f 72 20 24 63 6f 6d 6d 61 6e 64 73  arator $commands
4110: 20 5b 6c 69 73 74 20 41 70 70 6c 79 5d 5d 0a 20   [list Apply]]. 
4120: 20 20 20 73 65 74 20 77 20 5b 77 69 6e 66 6f 20     set w [winfo 
4130: 74 6f 70 6c 65 76 65 6c 20 24 66 5d 0a 0a 20 20  toplevel $f]..  
4140: 20 20 73 65 74 20 66 31 20 5b 66 72 61 6d 65 20    set f1 [frame 
4150: 24 66 2e 66 31 20 2d 67 72 69 64 20 22 30 20 6e  $f.f1 -grid "0 n
4160: 22 5d 0a 20 20 20 20 4c 61 62 65 6c 20 24 66 31  "].    Label $f1
4170: 2e 6c 31 20 2d 74 65 78 74 20 22 50 72 6f 6a 65  .l1 -text "Proje
4180: 63 74 3a 22 20 2d 67 72 69 64 20 30 20 2d 68 65  ct:" -grid 0 -he
4190: 6c 70 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20  lptext \.       
41a0: 22 41 20 70 72 6f 6a 65 63 74 20 69 6e 63 6c 75  "A project inclu
41b0: 64 65 73 20 61 6c 6c 20 74 68 65 20 63 6f 6d 70  des all the comp
41c0: 69 6c 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ilation informat
41d0: 69 6f 6e 2e 20 43 72 65 61 74 65 20 61 20 70 72  ion. Create a pr
41e0: 6f 6a 65 63 74 20 62 65 66 6f 72 65 20 65 6e 74  oject before ent
41f0: 65 72 69 6e 67 20 64 61 74 61 22 0a 20 20 20 20  ering data".    
4200: 43 6f 6d 62 6f 42 6f 78 20 24 66 31 2e 63 62 31  ComboBox $f1.cb1
4210: 20 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 63   -textvariable c
4220: 70 72 6f 6a 65 63 74 3a 3a 70 72 6f 6a 65 63 74  project::project
4230: 20 2d 67 72 69 64 20 22 31 20 33 22 20 2d 77 69   -grid "1 3" -wi
4240: 64 74 68 20 31 30 30 20 2d 65 64 69 74 61 62 6c  dth 100 -editabl
4250: 65 20 30 20 5c 0a 09 20 2d 76 61 6c 75 65 73 20  e 0 \.. -values 
4260: 24 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70  $RamDebugger::op
4270: 74 69 6f 6e 73 28 72 65 63 65 6e 74 70 72 6f 6a  tions(recentproj
4280: 65 63 74 73 29 20 2d 6d 6f 64 69 66 79 63 6d 64  ects) -modifycmd
4290: 20 22 63 70 72 6f 6a 65 63 74 3a 3a 4f 70 65 6e   "cproject::Open
42a0: 50 72 6f 6a 65 63 74 20 24 77 20 30 22 0a 0a 20  Project $w 0".. 
42b0: 20 20 20 66 6f 63 75 73 20 24 66 31 2e 63 62 31     focus $f1.cb1
42c0: 0a 0a 20 20 20 20 73 65 74 20 62 62 6f 78 20 5b  ..    set bbox [
42d0: 42 75 74 74 6f 6e 42 6f 78 20 24 66 31 2e 62 62  ButtonBox $f1.bb
42e0: 6f 78 31 20 2d 73 70 61 63 69 6e 67 20 30 20 2d  ox1 -spacing 0 -
42f0: 70 61 64 78 20 31 20 2d 70 61 64 79 20 31 20 2d  padx 1 -pady 1 -
4300: 68 6f 6d 6f 67 65 6e 65 6f 75 73 20 31 20 2d 67  homogeneous 1 -g
4310: 72 69 64 20 22 34 20 6e 77 22 5d 0a 20 20 20 20  rid "4 nw"].    
4320: 24 62 62 6f 78 20 61 64 64 20 2d 69 6d 61 67 65  $bbox add -image
4330: 20 66 69 6c 65 6e 65 77 31 36 20 5c 0a 09 20 2d   filenew16 \.. -
4340: 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65  highlightthickne
4350: 73 73 20 30 20 2d 74 61 6b 65 66 6f 63 75 73 20  ss 0 -takefocus 
4360: 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e 6b 20 2d  0 -relief link -
4370: 62 6f 72 64 65 72 77 69 64 74 68 20 31 20 2d 70  borderwidth 1 -p
4380: 61 64 78 20 31 20 2d 70 61 64 79 20 31 20 5c 0a  adx 1 -pady 1 \.
4390: 09 20 2d 68 65 6c 70 74 65 78 74 20 5b 5f 20 22  . -helptext [_ "
43a0: 43 72 65 61 74 65 20 6e 65 77 20 70 72 6f 6a 65  Create new proje
43b0: 63 74 22 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e  ct"] \.. -comman
43c0: 64 20 22 63 70 72 6f 6a 65 63 74 3a 3a 4e 65 77  d "cproject::New
43d0: 50 72 6f 6a 65 63 74 20 24 77 22 0a 20 20 20 20  Project $w".    
43e0: 24 62 62 6f 78 20 61 64 64 20 2d 69 6d 61 67 65  $bbox add -image
43f0: 20 66 69 6c 65 6f 70 65 6e 31 36 20 5c 0a 09 20   fileopen16 \.. 
4400: 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
4410: 65 73 73 20 30 20 2d 74 61 6b 65 66 6f 63 75 73  ess 0 -takefocus
4420: 20 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e 6b 20   0 -relief link 
4430: 2d 62 6f 72 64 65 72 77 69 64 74 68 20 31 20 2d  -borderwidth 1 -
4440: 70 61 64 78 20 31 20 2d 70 61 64 79 20 31 20 5c  padx 1 -pady 1 \
4450: 0a 09 20 2d 68 65 6c 70 74 65 78 74 20 5b 5f 20  .. -helptext [_ 
4460: 22 4f 70 65 6e 20 65 78 69 73 74 69 6e 67 20 70  "Open existing p
4470: 72 6f 6a 65 63 74 22 5d 20 5c 0a 09 20 2d 63 6f  roject"] \.. -co
4480: 6d 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74 3a  mmand "cproject:
4490: 3a 4f 70 65 6e 50 72 6f 6a 65 63 74 20 24 77 22  :OpenProject $w"
44a0: 0a 20 20 20 20 24 62 62 6f 78 20 61 64 64 20 2d  .    $bbox add -
44b0: 69 6d 61 67 65 20 66 69 6c 65 73 61 76 65 31 36  image filesave16
44c0: 20 5c 0a 09 20 2d 68 69 67 68 6c 69 67 68 74 74   \.. -highlightt
44d0: 68 69 63 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65  hickness 0 -take
44e0: 66 6f 63 75 73 20 30 20 2d 72 65 6c 69 65 66 20  focus 0 -relief 
44f0: 6c 69 6e 6b 20 2d 62 6f 72 64 65 72 77 69 64 74  link -borderwidt
4500: 68 20 31 20 2d 70 61 64 78 20 31 20 2d 70 61 64  h 1 -padx 1 -pad
4510: 79 20 31 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78  y 1 \.. -helptex
4520: 74 20 5b 5f 20 22 53 61 76 65 20 61 73 20 70 72  t [_ "Save as pr
4530: 6f 6a 65 63 74 22 5d 20 5c 0a 09 20 2d 63 6f 6d  oject"] \.. -com
4540: 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74 3a 3a  mand "cproject::
4550: 53 61 76 65 50 72 6f 6a 65 63 74 20 24 77 22 0a  SaveProject $w".
4560: 20 0a 20 20 20 20 4c 61 62 65 6c 20 24 66 31 2e   .    Label $f1.
4570: 6c 32 20 2d 74 65 78 74 20 22 47 72 6f 75 70 3a  l2 -text "Group:
4580: 22 20 2d 67 72 69 64 20 22 30 20 70 79 33 22 20  " -grid "0 py3" 
4590: 2d 68 65 6c 70 74 65 78 74 20 5c 0a 20 20 20 20  -helptext \.    
45a0: 20 20 20 22 41 20 67 72 6f 75 70 20 69 73 20 61     "A group is a
45b0: 20 73 65 74 20 6f 66 20 66 69 6c 65 73 20 77 69   set of files wi
45c0: 74 68 20 63 6f 6d 6d 6f 6e 20 63 6f 6d 70 69 6c  th common compil
45d0: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 54  ation options. T
45e0: 68 65 20 73 70 65 63 69 61 6c 20 67 72 6f 75 70  he special group
45f0: 20 27 61 6c 6c 27 5c 0a 09 61 6c 77 61 79 73 20   'all'\..always 
4600: 65 78 69 73 74 73 20 61 6e 64 20 61 66 66 65 63  exists and affec
4610: 74 73 20 61 6c 6c 20 66 69 6c 65 73 22 0a 20 20  ts all files".  
4620: 20 20 43 6f 6d 62 6f 42 6f 78 20 24 66 31 2e 63    ComboBox $f1.c
4630: 62 32 20 2d 74 65 78 74 76 61 72 69 61 62 6c 65  b2 -textvariable
4640: 20 63 70 72 6f 6a 65 63 74 3a 3a 67 72 6f 75 70   cproject::group
4650: 20 2d 67 72 69 64 20 31 20 2d 76 61 6c 75 65 73   -grid 1 -values
4660: 20 24 63 70 72 6f 6a 65 63 74 3a 3a 67 72 6f 75   $cproject::grou
4670: 70 73 20 5c 0a 20 20 20 20 20 20 20 2d 65 64 69  ps \.       -edi
4680: 74 61 62 6c 65 20 30 0a 0a 20 20 20 20 74 72 61  table 0..    tra
4690: 63 65 20 76 61 72 20 63 70 72 6f 6a 65 63 74 3a  ce var cproject:
46a0: 3a 67 72 6f 75 70 73 20 77 20 22 63 70 72 6f 6a  :groups w "cproj
46b0: 65 63 74 3a 3a 55 70 64 61 74 65 43 6f 6d 62 6f  ect::UpdateCombo
46c0: 56 61 6c 75 65 73 20 24 66 31 2e 63 62 32 20 63  Values $f1.cb2 c
46d0: 70 72 6f 6a 65 63 74 3a 3a 67 72 6f 75 70 73 20  project::groups 
46e0: 3b 23 22 0a 0a 20 20 20 20 73 65 74 20 62 62 6f  ;#"..    set bbo
46f0: 78 20 5b 42 75 74 74 6f 6e 42 6f 78 20 24 66 31  x [ButtonBox $f1
4700: 2e 62 62 6f 78 32 20 2d 73 70 61 63 69 6e 67 20  .bbox2 -spacing 
4710: 30 20 2d 70 61 64 78 20 31 20 2d 70 61 64 79 20  0 -padx 1 -pady 
4720: 31 20 2d 68 6f 6d 6f 67 65 6e 65 6f 75 73 20 31  1 -homogeneous 1
4730: 20 2d 67 72 69 64 20 22 32 20 77 22 5d 0a 20 20   -grid "2 w"].  
4740: 20 20 24 62 62 6f 78 20 61 64 64 20 2d 69 6d 61    $bbox add -ima
4750: 67 65 20 61 63 74 74 69 63 6b 31 36 20 5c 0a 09  ge acttick16 \..
4760: 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b   -highlightthick
4770: 6e 65 73 73 20 30 20 2d 74 61 6b 65 66 6f 63 75  ness 0 -takefocu
4780: 73 20 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e 6b  s 0 -relief link
4790: 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 31 20   -borderwidth 1 
47a0: 2d 70 61 64 78 20 31 20 2d 70 61 64 79 20 31 20  -padx 1 -pady 1 
47b0: 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74 20 5b 5f  \.. -helptext [_
47c0: 20 22 43 72 65 61 74 65 20 6e 65 77 20 67 72 6f   "Create new gro
47d0: 75 70 22 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e  up"] \.. -comman
47e0: 64 20 22 63 70 72 6f 6a 65 63 74 3a 3a 43 72 65  d "cproject::Cre
47f0: 61 74 65 4d 6f 64 69 66 79 47 72 6f 75 70 20 24  ateModifyGroup $
4800: 77 20 63 72 65 61 74 65 22 0a 20 20 20 20 24 62  w create".    $b
4810: 62 6f 78 20 61 64 64 20 2d 69 6d 61 67 65 20 65  box add -image e
4820: 64 69 74 31 36 20 5c 0a 09 20 2d 68 69 67 68 6c  dit16 \.. -highl
4830: 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20 30 20  ightthickness 0 
4840: 2d 74 61 6b 65 66 6f 63 75 73 20 30 20 2d 72 65  -takefocus 0 -re
4850: 6c 69 65 66 20 6c 69 6e 6b 20 2d 62 6f 72 64 65  lief link -borde
4860: 72 77 69 64 74 68 20 31 20 2d 70 61 64 78 20 31  rwidth 1 -padx 1
4870: 20 2d 70 61 64 79 20 31 20 5c 0a 09 20 2d 68 65   -pady 1 \.. -he
4880: 6c 70 74 65 78 74 20 5b 5f 20 22 52 65 6e 61 6d  lptext [_ "Renam
4890: 65 20 67 72 6f 75 70 22 5d 20 5c 0a 09 20 2d 63  e group"] \.. -c
48a0: 6f 6d 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74  ommand "cproject
48b0: 3a 3a 43 72 65 61 74 65 4d 6f 64 69 66 79 47 72  ::CreateModifyGr
48c0: 6f 75 70 20 24 77 20 72 65 6e 61 6d 65 22 0a 20  oup $w rename". 
48d0: 20 20 20 24 62 62 6f 78 20 61 64 64 20 2d 69 6d     $bbox add -im
48e0: 61 67 65 20 61 63 74 63 72 6f 73 73 31 36 20 5c  age actcross16 \
48f0: 0a 09 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69  .. -highlightthi
4900: 63 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65 66 6f  ckness 0 -takefo
4910: 63 75 73 20 30 20 2d 72 65 6c 69 65 66 20 6c 69  cus 0 -relief li
4920: 6e 6b 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20  nk -borderwidth 
4930: 31 20 2d 70 61 64 78 20 31 20 2d 70 61 64 79 20  1 -padx 1 -pady 
4940: 31 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74 20  1 \.. -helptext 
4950: 5b 5f 20 22 44 65 6c 65 74 65 20 67 72 6f 75 70  [_ "Delete group
4960: 22 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e 64 20  "] \.. -command 
4970: 22 63 70 72 6f 6a 65 63 74 3a 3a 43 72 65 61 74  "cproject::Creat
4980: 65 4d 6f 64 69 66 79 47 72 6f 75 70 20 24 77 20  eModifyGroup $w 
4990: 64 65 6c 65 74 65 22 0a 0a 20 20 20 20 66 72 61  delete"..    fra
49a0: 6d 65 20 24 66 31 2e 66 31 20 2d 67 72 69 64 20  me $f1.f1 -grid 
49b0: 22 33 20 32 20 70 78 33 20 70 79 33 20 65 77 22  "3 2 px3 py3 ew"
49c0: 20 2d 62 64 20 32 20 2d 72 65 6c 69 65 66 20 72   -bd 2 -relief r
49d0: 61 69 73 65 64 0a 20 20 20 20 72 61 64 69 6f 62  aised.    radiob
49e0: 75 74 74 6f 6e 20 24 66 31 2e 66 31 2e 72 31 20  utton $f1.f1.r1 
49f0: 2d 74 65 78 74 20 44 65 62 75 67 20 2d 76 61 72  -text Debug -var
4a00: 69 61 62 6c 65 20 63 70 72 6f 6a 65 63 74 3a 3a  iable cproject::
4a10: 64 65 62 75 67 72 65 6c 65 61 73 65 20 2d 76 61  debugrelease -va
4a20: 6c 75 65 20 64 65 62 75 67 20 5c 0a 09 20 20 20  lue debug \..   
4a30: 20 2d 67 72 69 64 20 30 0a 20 20 20 20 72 61 64   -grid 0.    rad
4a40: 69 6f 62 75 74 74 6f 6e 20 24 66 31 2e 66 31 2e  iobutton $f1.f1.
4a50: 72 32 20 2d 74 65 78 74 20 52 65 6c 65 61 73 65  r2 -text Release
4a60: 20 2d 76 61 72 69 61 62 6c 65 20 63 70 72 6f 6a   -variable cproj
4a70: 65 63 74 3a 3a 64 65 62 75 67 72 65 6c 65 61 73  ect::debugreleas
4a80: 65 20 2d 76 61 6c 75 65 20 72 65 6c 65 61 73 65  e -value release
4a90: 20 5c 0a 09 20 20 20 20 2d 67 72 69 64 20 22 31   \..    -grid "1
4aa0: 22 0a 20 20 20 20 72 61 64 69 6f 62 75 74 74 6f  ".    radiobutto
4ab0: 6e 20 24 66 31 2e 66 31 2e 72 33 20 2d 74 65 78  n $f1.f1.r3 -tex
4ac0: 74 20 42 6f 74 68 20 2d 76 61 72 69 61 62 6c 65  t Both -variable
4ad0: 20 63 70 72 6f 6a 65 63 74 3a 3a 64 65 62 75 67   cproject::debug
4ae0: 72 65 6c 65 61 73 65 20 2d 76 61 6c 75 65 20 62  release -value b
4af0: 6f 74 68 20 5c 0a 09 20 20 20 20 2d 67 72 69 64  oth \..    -grid
4b00: 20 22 32 22 0a 0a 20 20 20 20 73 65 74 20 70 77   "2"..    set pw
4b10: 20 5b 70 61 6e 65 64 77 69 6e 64 6f 77 20 24 66   [panedwindow $f
4b20: 2e 70 77 20 2d 6f 72 69 65 6e 74 20 68 6f 72 69  .pw -orient hori
4b30: 7a 6f 6e 74 61 6c 20 2d 67 72 69 64 20 30 5d 0a  zontal -grid 0].
4b40: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 22 77 65  .    foreach "we
4b50: 69 67 68 74 31 20 77 65 69 67 68 74 32 22 20 5b  ight1 weight2" [
4b60: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 4d 61 6e  RamDebugger::Man
4b70: 61 67 65 50 61 6e 65 73 20 24 70 77 20 68 20 22  agePanes $pw h "
4b80: 32 20 33 22 5d 20 62 72 65 61 6b 0a 0a 23 20 20  2 3"] break..#  
4b90: 20 20 20 73 65 74 20 70 61 6e 65 31 20 5b 24 70     set pane1 [$p
4ba0: 77 20 61 64 64 20 2d 77 65 69 67 68 74 20 24 77  w add -weight $w
4bb0: 65 69 67 68 74 31 5d 0a 20 20 20 20 73 65 74 20  eight1].    set 
4bc0: 70 61 6e 65 31 20 5b 66 72 61 6d 65 20 24 70 77  pane1 [frame $pw
4bd0: 2e 70 61 6e 65 31 5d 0a 20 20 20 20 24 70 77 20  .pane1].    $pw 
4be0: 61 64 64 20 24 70 61 6e 65 31 20 2d 73 74 69 63  add $pane1 -stic
4bf0: 6b 79 20 6e 73 65 77 20 2d 77 69 64 74 68 20 24  ky nsew -width $
4c00: 77 65 69 67 68 74 31 0a 0a 20 20 20 20 73 65 74  weight1..    set
4c10: 20 73 77 20 5b 53 63 72 6f 6c 6c 65 64 57 69 6e   sw [ScrolledWin
4c20: 64 6f 77 20 24 70 61 6e 65 31 2e 6c 66 20 2d 72  dow $pane1.lf -r
4c30: 65 6c 69 65 66 20 73 75 6e 6b 65 6e 20 2d 62 6f  elief sunken -bo
4c40: 72 64 65 72 77 69 64 74 68 20 30 5d 0a 20 20 20  rderwidth 0].   
4c50: 20 73 65 74 20 44 69 61 6c 6f 67 57 69 6e 54 6f   set DialogWinTo
4c60: 70 3a 3a 75 73 65 72 28 24 77 2c 6c 69 73 74 29  p::user($w,list)
4c70: 20 5b 74 61 62 6c 65 6c 69 73 74 3a 3a 74 61 62   [tablelist::tab
4c80: 6c 65 6c 69 73 74 20 24 73 77 2e 6c 62 20 2d 77  lelist $sw.lb -w
4c90: 69 64 74 68 20 35 35 20 2d 68 65 69 67 68 74 20  idth 55 -height 
4ca0: 32 30 5c 0a 09 20 20 20 20 2d 65 78 70 6f 72 74  20\..    -export
4cb0: 73 65 6c 65 63 74 69 6f 6e 20 30 20 5c 0a 09 20  selection 0 \.. 
4cc0: 20 20 20 2d 63 6f 6c 75 6d 6e 73 20 5b 6c 69 73     -columns [lis
4cd0: 74 20 5c 0a 09 20 20 20 20 31 34 20 46 69 6c 65  t \..    14 File
4ce0: 20 20 20 6c 65 66 74 20 5c 0a 09 20 20 20 20 35     left \..    5
4cf0: 20 20 54 79 70 65 20 63 65 6e 74 65 72 20 5c 0a    Type center \.
4d00: 09 20 20 20 20 31 31 20 47 72 6f 75 70 20 72 69  .    11 Group ri
4d10: 67 68 74 20 5c 0a 09 20 20 20 20 31 35 20 50 61  ght \..    15 Pa
4d20: 74 68 20 6c 65 66 74 20 5c 0a 09 20 20 20 20 5d  th left \..    ]
4d30: 20 5c 0a 09 20 20 20 20 2d 6c 61 62 65 6c 63 6f   \..    -labelco
4d40: 6d 6d 61 6e 64 20 74 61 62 6c 65 6c 69 73 74 3a  mmand tablelist:
4d50: 3a 73 6f 72 74 42 79 43 6f 6c 75 6d 6e 20 5c 0a  :sortByColumn \.
4d60: 09 20 20 20 20 2d 62 61 63 6b 67 72 6f 75 6e 64  .    -background
4d70: 20 77 68 69 74 65 20 5c 0a 09 20 20 20 20 2d 73   white \..    -s
4d80: 65 6c 65 63 74 62 61 63 6b 67 72 6f 75 6e 64 20  electbackground 
4d90: 6e 61 76 79 20 2d 73 65 6c 65 63 74 66 6f 72 65  navy -selectfore
4da0: 67 72 6f 75 6e 64 20 77 68 69 74 65 20 5c 0a 09  ground white \..
4db0: 20 20 20 20 2d 73 74 72 65 74 63 68 20 31 20 2d      -stretch 1 -
4dc0: 73 65 6c 65 63 74 6d 6f 64 65 20 65 78 74 65 6e  selectmode exten
4dd0: 64 65 64 20 5c 0a 09 20 20 20 20 2d 68 69 67 68  ded \..    -high
4de0: 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20 30  lightthickness 0
4df0: 20 5c 0a 09 20 20 20 20 2d 6c 69 73 74 76 61 72   \..    -listvar
4e00: 69 61 62 6c 65 20 63 70 72 6f 6a 65 63 74 3a 3a  iable cproject::
4e10: 66 69 6c 65 73 5d 0a 20 20 20 20 0a 20 20 20 20  files].    .    
4e20: 24 73 77 20 73 65 74 77 69 64 67 65 74 20 24 44  $sw setwidget $D
4e30: 69 61 6c 6f 67 57 69 6e 54 6f 70 3a 3a 75 73 65  ialogWinTop::use
4e40: 72 28 24 77 2c 6c 69 73 74 29 0a 0a 20 20 20 20  r($w,list)..    
4e50: 62 69 6e 64 20 5b 24 73 77 2e 6c 62 20 62 6f 64  bind [$sw.lb bod
4e60: 79 70 61 74 68 5d 20 3c 31 3e 20 22 66 6f 63 75  ypath] <1> "focu
4e70: 73 20 24 73 77 2e 6c 62 22 0a 0a 20 20 20 20 73  s $sw.lb"..    s
4e80: 65 74 20 62 62 6f 78 20 5b 42 75 74 74 6f 6e 42  et bbox [ButtonB
4e90: 6f 78 20 24 70 61 6e 65 31 2e 62 62 6f 78 31 20  ox $pane1.bbox1 
4ea0: 2d 73 70 61 63 69 6e 67 20 30 20 2d 70 61 64 78  -spacing 0 -padx
4eb0: 20 31 20 2d 70 61 64 79 20 31 20 2d 68 6f 6d 6f   1 -pady 1 -homo
4ec0: 67 65 6e 65 6f 75 73 20 31 5d 0a 20 20 20 20 24  geneous 1].    $
4ed0: 62 62 6f 78 20 61 64 64 20 2d 69 6d 61 67 65 20  bbox add -image 
4ee0: 66 69 6c 65 6f 70 65 6e 31 36 20 5c 0a 09 20 2d  fileopen16 \.. -
4ef0: 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65  highlightthickne
4f00: 73 73 20 30 20 2d 74 61 6b 65 66 6f 63 75 73 20  ss 0 -takefocus 
4f10: 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e 6b 20 2d  0 -relief link -
4f20: 62 6f 72 64 65 72 77 69 64 74 68 20 31 20 2d 70  borderwidth 1 -p
4f30: 61 64 78 20 31 20 2d 70 61 64 79 20 31 20 5c 0a  adx 1 -pady 1 \.
4f40: 09 20 2d 68 65 6c 70 74 65 78 74 20 5b 5f 20 22  . -helptext [_ "
4f50: 41 64 64 20 66 69 6c 65 20 74 6f 20 70 72 6f 6a  Add file to proj
4f60: 65 63 74 22 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61  ect"] \.. -comma
4f70: 6e 64 20 22 63 70 72 6f 6a 65 63 74 3a 3a 41 64  nd "cproject::Ad
4f80: 64 4d 6f 64 46 69 6c 65 73 20 24 73 77 2e 6c 62  dModFiles $sw.lb
4f90: 20 66 69 6c 65 22 0a 20 20 20 20 24 62 62 6f 78   file".    $bbox
4fa0: 20 61 64 64 20 2d 69 6d 61 67 65 20 66 6f 6c 64   add -image fold
4fb0: 65 72 6f 70 65 6e 31 36 20 5c 0a 09 20 2d 68 69  eropen16 \.. -hi
4fc0: 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
4fd0: 20 30 20 2d 74 61 6b 65 66 6f 63 75 73 20 30 20   0 -takefocus 0 
4fe0: 2d 72 65 6c 69 65 66 20 6c 69 6e 6b 20 2d 62 6f  -relief link -bo
4ff0: 72 64 65 72 77 69 64 74 68 20 31 20 2d 70 61 64  rderwidth 1 -pad
5000: 78 20 31 20 2d 70 61 64 79 20 31 20 5c 0a 09 20  x 1 -pady 1 \.. 
5010: 2d 68 65 6c 70 74 65 78 74 20 5b 5f 20 22 41 64  -helptext [_ "Ad
5020: 64 20 66 69 6c 65 73 20 66 72 6f 6d 20 64 69 72  d files from dir
5030: 65 63 74 6f 72 79 20 74 6f 20 70 72 6f 6a 65 63  ectory to projec
5040: 74 22 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e 64  t"] \.. -command
5050: 20 22 63 70 72 6f 6a 65 63 74 3a 3a 41 64 64 4d   "cproject::AddM
5060: 6f 64 46 69 6c 65 73 20 24 73 77 2e 6c 62 20 64  odFiles $sw.lb d
5070: 69 72 22 0a 20 20 20 20 24 62 62 6f 78 20 61 64  ir".    $bbox ad
5080: 64 20 2d 69 6d 61 67 65 20 65 64 69 74 31 36 20  d -image edit16 
5090: 5c 0a 09 20 2d 68 69 67 68 6c 69 67 68 74 74 68  \.. -highlightth
50a0: 69 63 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65 66  ickness 0 -takef
50b0: 6f 63 75 73 20 30 20 2d 72 65 6c 69 65 66 20 6c  ocus 0 -relief l
50c0: 69 6e 6b 20 2d 62 6f 72 64 65 72 77 69 64 74 68  ink -borderwidth
50d0: 20 31 20 2d 70 61 64 78 20 31 20 2d 70 61 64 79   1 -padx 1 -pady
50e0: 20 31 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74   1 \.. -helptext
50f0: 20 5b 5f 20 22 41 73 73 69 67 6e 20 73 65 6c 65   [_ "Assign sele
5100: 63 74 65 64 20 66 69 6c 65 73 20 74 6f 20 61 63  cted files to ac
5110: 74 69 76 65 20 67 72 6f 75 70 22 5d 20 5c 0a 09  tive group"] \..
5120: 20 2d 63 6f 6d 6d 61 6e 64 20 22 63 70 72 6f 6a   -command "cproj
5130: 65 63 74 3a 3a 41 64 64 4d 6f 64 46 69 6c 65 73  ect::AddModFiles
5140: 20 24 73 77 2e 6c 62 20 65 64 69 74 22 0a 20 20   $sw.lb edit".  
5150: 20 20 24 62 62 6f 78 20 61 64 64 20 2d 69 6d 61    $bbox add -ima
5160: 67 65 20 61 63 74 63 72 6f 73 73 31 36 20 5c 0a  ge actcross16 \.
5170: 09 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  . -highlightthic
5180: 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65 66 6f 63  kness 0 -takefoc
5190: 75 73 20 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e  us 0 -relief lin
51a0: 6b 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 31  k -borderwidth 1
51b0: 20 2d 70 61 64 78 20 31 20 2d 70 61 64 79 20 31   -padx 1 -pady 1
51c0: 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74 20 5b   \.. -helptext [
51d0: 5f 20 22 44 65 6c 65 74 65 20 66 69 6c 65 73 20  _ "Delete files 
51e0: 66 72 6f 6d 20 70 72 6f 6a 65 63 74 22 5d 20 5c  from project"] \
51f0: 0a 09 20 2d 63 6f 6d 6d 61 6e 64 20 22 63 70 72  .. -command "cpr
5200: 6f 6a 65 63 74 3a 3a 41 64 64 4d 6f 64 46 69 6c  oject::AddModFil
5210: 65 73 20 24 73 77 2e 6c 62 20 64 65 6c 65 74 65  es $sw.lb delete
5220: 22 0a 20 20 20 20 24 62 62 6f 78 20 61 64 64 20  ".    $bbox add 
5230: 2d 69 6d 61 67 65 20 61 63 74 74 69 63 6b 31 36  -image acttick16
5240: 20 5c 0a 09 20 2d 68 69 67 68 6c 69 67 68 74 74   \.. -highlightt
5250: 68 69 63 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65  hickness 0 -take
5260: 66 6f 63 75 73 20 30 20 2d 72 65 6c 69 65 66 20  focus 0 -relief 
5270: 6c 69 6e 6b 20 2d 62 6f 72 64 65 72 77 69 64 74  link -borderwidt
5280: 68 20 31 20 2d 70 61 64 78 20 31 20 2d 70 61 64  h 1 -padx 1 -pad
5290: 79 20 31 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78  y 1 \.. -helptex
52a0: 74 20 5b 5f 20 22 56 69 65 77 20 66 69 6c 65 22  t [_ "View file"
52b0: 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e 64 20 22  ] \.. -command "
52c0: 63 70 72 6f 6a 65 63 74 3a 3a 41 64 64 4d 6f 64  cproject::AddMod
52d0: 46 69 6c 65 73 20 24 73 77 2e 6c 62 20 76 69 65  Files $sw.lb vie
52e0: 77 22 0a 0a 20 20 20 20 67 72 69 64 20 24 73 77  w"..    grid $sw
52f0: 20 2d 73 74 69 63 6b 79 20 6e 73 65 77 0a 20 20   -sticky nsew.  
5300: 20 20 67 72 69 64 20 24 62 62 6f 78 20 2d 73 74    grid $bbox -st
5310: 69 63 6b 79 20 6e 77 20 2d 70 61 64 79 20 33 0a  icky nw -pady 3.
5320: 20 20 20 20 67 72 69 64 20 63 6f 6c 75 6d 6e 63      grid columnc
5330: 6f 6e 66 69 67 75 72 65 20 24 70 61 6e 65 31 20  onfigure $pane1 
5340: 30 20 2d 77 65 69 67 68 74 20 31 0a 20 20 20 20  0 -weight 1.    
5350: 67 72 69 64 20 72 6f 77 63 6f 6e 66 69 67 75 72  grid rowconfigur
5360: 65 20 24 70 61 6e 65 31 20 30 20 2d 77 65 69 67  e $pane1 0 -weig
5370: 68 74 20 31 0a 0a 20 20 20 20 62 69 6e 64 20 5b  ht 1..    bind [
5380: 24 44 69 61 6c 6f 67 57 69 6e 54 6f 70 3a 3a 75  $DialogWinTop::u
5390: 73 65 72 28 24 77 2c 6c 69 73 74 29 20 62 6f 64  ser($w,list) bod
53a0: 79 70 61 74 68 5d 20 3c 42 75 74 74 6f 6e 50 72  ypath] <ButtonPr
53b0: 65 73 73 2d 33 3e 20 5c 0a 09 5b 62 69 6e 64 20  ess-3> \..[bind 
53c0: 54 61 62 6c 65 6c 69 73 74 42 6f 64 79 20 3c 42  TablelistBody <B
53d0: 75 74 74 6f 6e 50 72 65 73 73 2d 31 3e 5d 0a 0a  uttonPress-1>]..
53e0: 20 20 20 20 62 69 6e 64 20 5b 24 44 69 61 6c 6f      bind [$Dialo
53f0: 67 57 69 6e 54 6f 70 3a 3a 75 73 65 72 28 24 77  gWinTop::user($w
5400: 2c 6c 69 73 74 29 20 62 6f 64 79 70 61 74 68 5d  ,list) bodypath]
5410: 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d   <ButtonRelease-
5420: 33 3e 20 7b 0a 09 63 61 74 63 68 20 7b 20 64 65  3> {..catch { de
5430: 73 74 72 6f 79 20 25 57 2e 6d 65 6e 75 20 7d 0a  stroy %W.menu }.
5440: 09 73 65 74 20 6d 65 6e 75 20 5b 6d 65 6e 75 20  .set menu [menu 
5450: 25 57 2e 6d 65 6e 75 5d 0a 09 73 65 74 20 6c 62  %W.menu]..set lb
5460: 20 5b 77 69 6e 66 6f 20 70 61 72 65 6e 74 20 25   [winfo parent %
5470: 57 5d 0a 09 0a 09 24 6d 65 6e 75 20 61 64 64 20  W]....$menu add 
5480: 63 6f 6d 6d 61 6e 64 20 2d 6c 61 62 65 6c 20 22  command -label "
5490: 41 73 73 69 67 6e 20 67 72 6f 75 70 22 20 2d 63  Assign group" -c
54a0: 6f 6d 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74  ommand "cproject
54b0: 3a 3a 41 64 64 4d 6f 64 46 69 6c 65 73 20 24 6c  ::AddModFiles $l
54c0: 62 20 65 64 69 74 22 0a 09 24 6d 65 6e 75 20 61  b edit"..$menu a
54d0: 64 64 20 63 6f 6d 6d 61 6e 64 20 2d 6c 61 62 65  dd command -labe
54e0: 6c 20 22 56 69 65 77 20 66 69 6c 65 22 20 2d 63  l "View file" -c
54f0: 6f 6d 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74  ommand "cproject
5500: 3a 3a 41 64 64 4d 6f 64 46 69 6c 65 73 20 24 6c  ::AddModFiles $l
5510: 62 20 76 69 65 77 22 0a 09 24 6d 65 6e 75 20 61  b view"..$menu a
5520: 64 64 20 73 65 70 61 72 61 74 6f 72 0a 09 24 6d  dd separator..$m
5530: 65 6e 75 20 61 64 64 20 63 6f 6d 6d 61 6e 64 20  enu add command 
5540: 2d 6c 61 62 65 6c 20 22 44 65 6c 65 74 65 20 66  -label "Delete f
5550: 72 6f 6d 20 70 72 6f 6a 65 63 74 22 20 2d 63 6f  rom project" -co
5560: 6d 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74 3a  mmand "cproject:
5570: 3a 41 64 64 4d 6f 64 46 69 6c 65 73 20 24 6c 62  :AddModFiles $lb
5580: 20 64 65 6c 65 74 65 22 0a 09 74 6b 5f 70 6f 70   delete"..tk_pop
5590: 75 70 20 24 6d 65 6e 75 20 25 58 20 25 59 0a 20  up $menu %X %Y. 
55a0: 20 20 20 7d 0a 0a 20 20 20 20 23 73 65 74 20 70     }..    #set p
55b0: 61 6e 65 32 20 5b 24 70 77 20 61 64 64 20 2d 77  ane2 [$pw add -w
55c0: 65 69 67 68 74 20 24 77 65 69 67 68 74 32 5d 0a  eight $weight2].
55d0: 20 20 20 20 73 65 74 20 70 61 6e 65 32 20 5b 66      set pane2 [f
55e0: 72 61 6d 65 20 24 70 77 2e 70 61 6e 65 32 5d 0a  rame $pw.pane2].
55f0: 20 20 20 20 24 70 77 20 61 64 64 20 24 70 61 6e      $pw add $pan
5600: 65 32 20 2d 73 74 69 63 6b 79 20 6e 73 65 77 20  e2 -sticky nsew 
5610: 2d 77 69 64 74 68 20 24 77 65 69 67 68 74 32 0a  -width $weight2.
5620: 0a 0a 20 20 20 20 73 65 74 20 6e 6f 74 65 62 6f  ..    set notebo
5630: 6f 6b 20 5b 4e 6f 74 65 42 6f 6f 6b 20 24 70 61  ok [NoteBook $pa
5640: 6e 65 32 2e 6e 62 20 2d 68 6f 6d 6f 67 65 6e 65  ne2.nb -homogene
5650: 6f 75 73 20 31 20 2d 62 64 20 31 20 2d 69 6e 74  ous 1 -bd 1 -int
5660: 65 72 6e 61 6c 62 6f 72 64 65 72 77 69 64 74 68  ernalborderwidth
5670: 20 33 20 20 5c 0a 09 2d 67 72 69 64 20 22 30 20   3  \..-grid "0 
5680: 70 78 33 20 70 79 33 22 5d 0a 0a 20 20 20 20 73  px3 py3"]..    s
5690: 65 74 20 66 32 31 20 5b 24 70 61 6e 65 32 2e 6e  et f21 [$pane2.n
56a0: 62 20 69 6e 73 65 72 74 20 65 6e 64 20 63 6f 6d  b insert end com
56b0: 70 69 6c 61 74 69 6f 6e 20 2d 74 65 78 74 20 22  pilation -text "
56c0: 43 6f 6d 70 69 6c 61 74 69 6f 6e 22 5d 0a 0a 20  Compilation"].. 
56d0: 20 20 20 54 69 74 6c 65 46 72 61 6d 65 20 24 66     TitleFrame $f
56e0: 32 31 2e 66 31 20 2d 74 65 78 74 20 22 69 6e 63  21.f1 -text "inc
56f0: 6c 75 64 65 20 64 69 72 65 63 74 6f 72 69 65 73  lude directories
5700: 22 20 2d 67 72 69 64 20 30 0a 20 20 20 20 73 65  " -grid 0.    se
5710: 74 20 66 31 32 31 20 5b 24 66 32 31 2e 66 31 20  t f121 [$f21.f1 
5720: 67 65 74 66 72 61 6d 65 5d 0a 0a 20 20 20 20 73  getframe]..    s
5730: 65 74 20 73 77 20 5b 53 63 72 6f 6c 6c 65 64 57  et sw [ScrolledW
5740: 69 6e 64 6f 77 20 24 66 31 32 31 2e 6c 66 20 2d  indow $f121.lf -
5750: 72 65 6c 69 65 66 20 73 75 6e 6b 65 6e 20 2d 62  relief sunken -b
5760: 6f 72 64 65 72 77 69 64 74 68 20 30 5d 0a 20 20  orderwidth 0].  
5770: 20 20 6c 69 73 74 62 6f 78 20 24 73 77 2e 6c 62    listbox $sw.lb
5780: 20 2d 6c 69 73 74 76 61 72 69 61 62 6c 65 20 63   -listvariable c
5790: 70 72 6f 6a 65 63 74 3a 3a 74 68 69 73 64 61 74  project::thisdat
57a0: 61 43 28 69 6e 63 6c 75 64 65 64 69 72 73 29 0a  aC(includedirs).
57b0: 20 20 20 20 24 73 77 20 73 65 74 77 69 64 67 65      $sw setwidge
57c0: 74 20 24 73 77 2e 6c 62 0a 0a 20 20 20 20 73 65  t $sw.lb..    se
57d0: 74 20 62 62 6f 78 20 5b 42 75 74 74 6f 6e 42 6f  t bbox [ButtonBo
57e0: 78 20 24 66 31 32 31 2e 62 62 6f 78 31 20 2d 73  x $f121.bbox1 -s
57f0: 70 61 63 69 6e 67 20 30 20 2d 70 61 64 78 20 31  pacing 0 -padx 1
5800: 20 2d 70 61 64 79 20 31 20 2d 68 6f 6d 6f 67 65   -pady 1 -homoge
5810: 6e 65 6f 75 73 20 31 5d 0a 20 20 20 20 24 62 62  neous 1].    $bb
5820: 6f 78 20 61 64 64 20 2d 69 6d 61 67 65 20 66 6f  ox add -image fo
5830: 6c 64 65 72 6f 70 65 6e 31 36 20 5c 0a 09 20 2d  lderopen16 \.. -
5840: 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65  highlightthickne
5850: 73 73 20 30 20 2d 74 61 6b 65 66 6f 63 75 73 20  ss 0 -takefocus 
5860: 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e 6b 20 2d  0 -relief link -
5870: 62 6f 72 64 65 72 77 69 64 74 68 20 31 20 2d 70  borderwidth 1 -p
5880: 61 64 78 20 31 20 2d 70 61 64 79 20 31 20 5c 0a  adx 1 -pady 1 \.
5890: 09 20 2d 68 65 6c 70 74 65 78 74 20 5b 5f 20 22  . -helptext [_ "
58a0: 41 64 64 20 69 6e 63 6c 75 64 65 20 64 69 72 65  Add include dire
58b0: 63 74 6f 72 79 22 5d 20 5c 0a 09 20 2d 63 6f 6d  ctory"] \.. -com
58c0: 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74 3a 3a  mand "cproject::
58d0: 41 64 64 44 65 6c 44 69 72 65 63 74 6f 72 69 65  AddDelDirectorie
58e0: 73 20 24 73 77 2e 6c 62 20 61 64 64 22 0a 20 20  s $sw.lb add".  
58f0: 20 20 24 62 62 6f 78 20 61 64 64 20 2d 69 6d 61    $bbox add -ima
5900: 67 65 20 61 63 74 63 72 6f 73 73 31 36 20 5c 0a  ge actcross16 \.
5910: 09 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  . -highlightthic
5920: 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65 66 6f 63  kness 0 -takefoc
5930: 75 73 20 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e  us 0 -relief lin
5940: 6b 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 31  k -borderwidth 1
5950: 20 2d 70 61 64 78 20 31 20 2d 70 61 64 79 20 31   -padx 1 -pady 1
5960: 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74 20 5b   \.. -helptext [
5970: 5f 20 22 44 65 6c 65 74 65 20 69 6e 63 6c 75 64  _ "Delete includ
5980: 65 20 64 69 72 65 63 74 6f 72 79 22 5d 20 5c 0a  e directory"] \.
5990: 09 20 2d 63 6f 6d 6d 61 6e 64 20 22 63 70 72 6f  . -command "cpro
59a0: 6a 65 63 74 3a 3a 41 64 64 44 65 6c 44 69 72 65  ject::AddDelDire
59b0: 63 74 6f 72 69 65 73 20 24 73 77 2e 6c 62 20 64  ctories $sw.lb d
59c0: 65 6c 65 74 65 22 0a 0a 20 20 20 20 67 72 69 64  elete"..    grid
59d0: 20 24 66 31 32 31 2e 6c 66 20 2d 73 74 69 63 6b   $f121.lf -stick
59e0: 79 20 6e 73 65 77 0a 20 20 20 20 67 72 69 64 20  y nsew.    grid 
59f0: 24 62 62 6f 78 20 2d 73 74 69 63 6b 79 20 6e 77  $bbox -sticky nw
5a00: 0a 20 20 20 20 67 72 69 64 20 72 6f 77 63 6f 6e  .    grid rowcon
5a10: 66 69 67 75 72 65 20 24 66 31 32 31 20 30 20 2d  figure $f121 0 -
5a20: 77 65 69 67 68 74 20 31 0a 20 20 20 20 67 72 69  weight 1.    gri
5a30: 64 20 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72  d columnconfigur
5a40: 65 20 24 66 31 32 31 20 30 20 2d 77 65 69 67 68  e $f121 0 -weigh
5a50: 74 20 31 0a 20 20 20 20 0a 20 20 20 20 54 69 74  t 1.    .    Tit
5a60: 6c 65 46 72 61 6d 65 20 24 66 32 31 2e 66 31 35  leFrame $f21.f15
5a70: 20 2d 74 65 78 74 20 22 63 6f 6d 70 69 6c 65 72   -text "compiler
5a80: 22 20 2d 67 72 69 64 20 22 30 20 6e 22 0a 20 20  " -grid "0 n".  
5a90: 20 20 73 65 74 20 66 31 32 31 35 20 5b 24 66 32    set f1215 [$f2
5aa0: 31 2e 66 31 35 20 67 65 74 66 72 61 6d 65 5d 0a  1.f15 getframe].
5ab0: 0a 20 20 20 20 73 65 74 20 76 61 6c 75 65 73 20  .    set values 
5ac0: 5b 6c 69 73 74 20 22 22 20 67 63 63 20 67 2b 2b  [list "" gcc g++
5ad0: 5d 0a 20 20 20 20 43 6f 6d 62 6f 42 6f 78 20 24  ].    ComboBox $
5ae0: 66 31 32 31 35 2e 63 62 20 2d 74 65 78 74 76 61  f1215.cb -textva
5af0: 72 69 61 62 6c 65 20 63 70 72 6f 6a 65 63 74 3a  riable cproject:
5b00: 3a 74 68 69 73 64 61 74 61 43 28 63 6f 6d 70 69  :thisdataC(compi
5b10: 6c 65 72 29 20 2d 76 61 6c 75 65 73 20 24 76 61  ler) -values $va
5b20: 6c 75 65 73 20 5c 0a 09 2d 67 72 69 64 20 22 30  lues \..-grid "0
5b30: 20 77 22 20 2d 77 69 64 74 68 20 31 30 0a 0a 20   w" -width 10.. 
5b40: 20 20 20 54 69 74 6c 65 46 72 61 6d 65 20 24 66     TitleFrame $f
5b50: 32 31 2e 66 32 20 2d 74 65 78 74 20 22 64 65 66  21.f2 -text "def
5b60: 69 6e 65 73 22 20 2d 67 72 69 64 20 22 30 20 6e  ines" -grid "0 n
5b70: 22 0a 20 20 20 20 73 65 74 20 66 31 32 32 20 5b  ".    set f122 [
5b80: 24 66 32 31 2e 66 32 20 67 65 74 66 72 61 6d 65  $f21.f2 getframe
5b90: 5d 0a 0a 20 20 20 20 65 6e 74 72 79 20 24 66 31  ]..    entry $f1
5ba0: 32 32 2e 65 20 2d 67 72 69 64 20 30 20 2d 74 65  22.e -grid 0 -te
5bb0: 78 74 76 61 72 69 61 62 6c 65 20 63 70 72 6f 6a  xtvariable cproj
5bc0: 65 63 74 3a 3a 74 68 69 73 64 61 74 61 43 28 64  ect::thisdataC(d
5bd0: 65 66 69 6e 65 73 29 0a 0a 20 20 20 20 54 69 74  efines)..    Tit
5be0: 6c 65 46 72 61 6d 65 20 24 66 32 31 2e 66 33 20  leFrame $f21.f3 
5bf0: 2d 74 65 78 74 20 22 61 64 64 69 74 69 6f 6e 61  -text "additiona
5c00: 6c 20 63 6f 6d 70 69 6c 65 20 66 6c 61 67 73 22  l compile flags"
5c10: 20 2d 67 72 69 64 20 22 30 20 6e 22 0a 20 20 20   -grid "0 n".   
5c20: 20 73 65 74 20 66 31 32 33 20 5b 24 66 32 31 2e   set f123 [$f21.
5c30: 66 33 20 67 65 74 66 72 61 6d 65 5d 0a 0a 20 20  f3 getframe]..  
5c40: 20 20 65 6e 74 72 79 20 24 66 31 32 33 2e 65 20    entry $f123.e 
5c50: 2d 67 72 69 64 20 30 20 2d 74 65 78 74 76 61 72  -grid 0 -textvar
5c60: 69 61 62 6c 65 20 63 70 72 6f 6a 65 63 74 3a 3a  iable cproject::
5c70: 74 68 69 73 64 61 74 61 43 28 66 6c 61 67 73 29  thisdataC(flags)
5c80: 0a 0a 20 20 20 20 73 65 74 20 66 32 33 20 5b 24  ..    set f23 [$
5c90: 70 61 6e 65 32 2e 6e 62 20 69 6e 73 65 72 74 20  pane2.nb insert 
5ca0: 65 6e 64 20 65 78 65 63 75 74 65 20 2d 74 65 78  end execute -tex
5cb0: 74 20 22 45 78 65 63 75 74 65 22 5d 0a 0a 20 20  t "Execute"]..  
5cc0: 20 20 54 69 74 6c 65 46 72 61 6d 65 20 24 66 32    TitleFrame $f2
5cd0: 33 2e 66 31 20 2d 74 65 78 74 20 22 65 78 65 63  3.f1 -text "exec
5ce0: 75 74 61 62 6c 65 20 66 69 6c 65 22 20 2d 67 72  utable file" -gr
5cf0: 69 64 20 22 30 20 6e 22 0a 20 20 20 20 73 65 74  id "0 n".    set
5d00: 20 66 33 32 31 20 5b 24 66 32 33 2e 66 31 20 67   f321 [$f23.f1 g
5d10: 65 74 66 72 61 6d 65 5d 0a 0a 20 20 20 20 65 6e  etframe]..    en
5d20: 74 72 79 20 24 66 33 32 31 2e 65 20 2d 67 72 69  try $f321.e -gri
5d30: 64 20 30 20 2d 74 65 78 74 76 61 72 69 61 62 6c  d 0 -textvariabl
5d40: 65 20 63 70 72 6f 6a 65 63 74 3a 3a 74 68 69 73  e cproject::this
5d50: 64 61 74 61 45 28 65 78 65 29 0a 20 20 20 20 42  dataE(exe).    B
5d60: 75 74 74 6f 6e 20 24 66 33 32 31 2e 62 31 20 2d  utton $f321.b1 -
5d70: 69 6d 61 67 65 20 5b 42 69 74 6d 61 70 3a 3a 67  image [Bitmap::g
5d80: 65 74 20 66 69 6c 65 5d 20 2d 77 69 64 74 68 20  et file] -width 
5d90: 31 36 20 2d 67 72 69 64 20 31 20 2d 72 65 6c 69  16 -grid 1 -reli
5da0: 65 66 20 6c 69 6e 6b 0a 0a 20 20 20 20 54 69 74  ef link..    Tit
5db0: 6c 65 46 72 61 6d 65 20 24 66 32 33 2e 66 32 20  leFrame $f23.f2 
5dc0: 2d 74 65 78 74 20 22 77 6f 72 6b 69 6e 67 20 64  -text "working d
5dd0: 69 72 65 63 74 6f 72 79 22 20 2d 67 72 69 64 20  irectory" -grid 
5de0: 22 30 20 6e 22 0a 20 20 20 20 73 65 74 20 66 33  "0 n".    set f3
5df0: 32 32 20 5b 24 66 32 33 2e 66 32 20 67 65 74 66  22 [$f23.f2 getf
5e00: 72 61 6d 65 5d 0a 0a 20 20 20 20 65 6e 74 72 79  rame]..    entry
5e10: 20 24 66 33 32 32 2e 65 20 2d 67 72 69 64 20 30   $f322.e -grid 0
5e20: 20 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 63   -textvariable c
5e30: 70 72 6f 6a 65 63 74 3a 3a 74 68 69 73 64 61 74  project::thisdat
5e40: 61 45 28 65 78 65 63 64 69 72 29 0a 20 20 20 20  aE(execdir).    
5e50: 42 75 74 74 6f 6e 20 24 66 33 32 32 2e 62 31 20  Button $f322.b1 
5e60: 2d 69 6d 61 67 65 20 5b 42 69 74 6d 61 70 3a 3a  -image [Bitmap::
5e70: 67 65 74 20 66 6f 6c 64 65 72 5d 20 2d 77 69 64  get folder] -wid
5e80: 74 68 20 31 36 20 2d 67 72 69 64 20 31 20 2d 72  th 16 -grid 1 -r
5e90: 65 6c 69 65 66 20 6c 69 6e 6b 0a 0a 20 20 20 20  elief link..    
5ea0: 54 69 74 6c 65 46 72 61 6d 65 20 24 66 32 33 2e  TitleFrame $f23.
5eb0: 66 33 20 2d 74 65 78 74 20 22 61 72 67 75 6d 65  f3 -text "argume
5ec0: 6e 74 73 22 20 2d 67 72 69 64 20 22 30 20 6e 22  nts" -grid "0 n"
5ed0: 0a 20 20 20 20 73 65 74 20 66 33 32 33 20 5b 24  .    set f323 [$
5ee0: 66 32 33 2e 66 33 20 67 65 74 66 72 61 6d 65 5d  f23.f3 getframe]
5ef0: 0a 0a 20 20 20 20 65 6e 74 72 79 20 24 66 33 32  ..    entry $f32
5f00: 33 2e 65 20 2d 67 72 69 64 20 30 20 2d 74 65 78  3.e -grid 0 -tex
5f10: 74 76 61 72 69 61 62 6c 65 20 63 70 72 6f 6a 65  tvariable cproje
5f20: 63 74 3a 3a 74 68 69 73 64 61 74 61 45 28 65 78  ct::thisdataE(ex
5f30: 65 61 72 67 73 29 0a 0a 20 20 20 20 73 65 74 20  eargs)..    set 
5f40: 63 6f 6d 6d 20 7b 0a 09 73 65 74 20 63 70 72 6f  comm {..set cpro
5f50: 6a 65 63 74 3a 3a 74 68 69 73 64 61 74 61 45 28  ject::thisdataE(
5f60: 65 78 65 29 20 5b 74 6b 5f 67 65 74 4f 70 65 6e  exe) [tk_getOpen
5f70: 46 69 6c 65 20 2d 66 69 6c 65 74 79 70 65 73 20  File -filetypes 
5f80: 7b 7b 7b 41 6c 6c 20 46 69 6c 65 73 7d 20 2a 7d  {{{All Files} *}
5f90: 7d 20 5c 0a 09 09 2d 69 6e 69 74 69 61 6c 64 69  } \...-initialdi
5fa0: 72 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a 3a  r $RamDebugger::
5fb0: 6f 70 74 69 6f 6e 73 28 64 65 66 61 75 6c 74 64  options(defaultd
5fc0: 69 72 29 20 2d 69 6e 69 74 69 61 6c 66 69 6c 65  ir) -initialfile
5fd0: 20 5c 0a 09 09 5b 66 69 6c 65 20 74 61 69 6c 20   \...[file tail 
5fe0: 24 63 70 72 6f 6a 65 63 74 3a 3a 74 68 69 73 64  $cproject::thisd
5ff0: 61 74 61 45 28 65 78 65 29 5d 20 2d 70 61 72 65  ataE(exe)] -pare
6000: 6e 74 20 50 41 52 45 4e 54 20 2d 74 69 74 6c 65  nt PARENT -title
6010: 20 22 45 78 65 63 75 74 61 62 6c 65 20 66 69 6c   "Executable fil
6020: 65 22 5d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  e"].    }.    se
6030: 74 20 63 6f 6d 6d 20 5b 73 74 72 69 6e 67 20 6d  t comm [string m
6040: 61 70 20 5b 6c 69 73 74 20 50 41 52 45 4e 54 20  ap [list PARENT 
6050: 24 77 5d 20 24 63 6f 6d 6d 5d 0a 20 20 20 20 24  $w] $comm].    $
6060: 66 33 32 31 2e 62 31 20 63 6f 6e 66 69 67 75 72  f321.b1 configur
6070: 65 20 2d 63 6f 6d 6d 61 6e 64 20 24 63 6f 6d 6d  e -command $comm
6080: 0a 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 20 7b  ..    set comm {
6090: 0a 09 73 65 74 20 69 6e 69 74 69 61 6c 20 24 52  ..set initial $R
60a0: 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74 69  amDebugger::opti
60b0: 6f 6e 73 28 64 65 66 61 75 6c 74 64 69 72 29 0a  ons(defaultdir).
60c0: 09 63 61 74 63 68 20 7b 20 73 65 74 20 69 6e 69  .catch { set ini
60d0: 74 69 61 6c 20 5b 66 69 6c 65 20 64 69 72 6e 61  tial [file dirna
60e0: 6d 65 20 24 63 70 72 6f 6a 65 63 74 3a 3a 74 68  me $cproject::th
60f0: 69 73 64 61 74 61 45 28 65 78 65 29 5d 20 7d 0a  isdataE(exe)] }.
6100: 09 73 65 74 20 63 70 72 6f 6a 65 63 74 3a 3a 74  .set cproject::t
6110: 68 69 73 64 61 74 61 45 28 65 78 65 63 64 69 72  hisdataE(execdir
6120: 29 20 5b 52 61 6d 44 65 62 75 67 67 65 72 3a 3a  ) [RamDebugger::
6130: 66 69 6c 65 6e 6f 72 6d 61 6c 69 7a 65 20 5b 74  filenormalize [t
6140: 6b 5f 63 68 6f 6f 73 65 44 69 72 65 63 74 6f 72  k_chooseDirector
6150: 79 20 20 20 5c 0a 09 20 20 20 20 2d 69 6e 69 74  y   \..    -init
6160: 69 61 6c 64 69 72 20 24 69 6e 69 74 69 61 6c 20  ialdir $initial 
6170: 2d 70 61 72 65 6e 74 20 50 41 52 45 4e 54 20 5c  -parent PARENT \
6180: 0a 09 20 20 20 20 2d 74 69 74 6c 65 20 22 57 6f  ..    -title "Wo
6190: 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72 79 22  rking directory"
61a0: 20 2d 6d 75 73 74 65 78 69 73 74 20 31 5d 5d 0a   -mustexist 1]].
61b0: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 63 6f      }.    set co
61c0: 6d 6d 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b  mm [string map [
61d0: 6c 69 73 74 20 50 41 52 45 4e 54 20 24 77 5d 20  list PARENT $w] 
61e0: 24 63 6f 6d 6d 5d 0a 20 20 20 20 24 66 33 32 32  $comm].    $f322
61f0: 2e 62 31 20 63 6f 6e 66 69 67 75 72 65 20 2d 63  .b1 configure -c
6200: 6f 6d 6d 61 6e 64 20 24 63 6f 6d 6d 0a 0a 0a 20  ommand $comm... 
6210: 20 20 20 24 70 61 6e 65 32 2e 6e 62 20 63 6f 6d     $pane2.nb com
6220: 70 75 74 65 5f 73 69 7a 65 0a 20 20 20 20 24 70  pute_size.    $p
6230: 61 6e 65 32 2e 6e 62 20 72 61 69 73 65 20 63 6f  ane2.nb raise co
6240: 6d 70 69 6c 61 74 69 6f 6e 0a 20 0a 20 20 20 20  mpilation. .    
6250: 73 75 70 65 72 67 72 69 64 3a 3a 67 6f 20 24 66  supergrid::go $f
6260: 31 32 31 35 0a 20 20 20 20 73 75 70 65 72 67 72  1215.    supergr
6270: 69 64 3a 3a 67 6f 20 24 66 31 32 32 0a 20 20 20  id::go $f122.   
6280: 20 73 75 70 65 72 67 72 69 64 3a 3a 67 6f 20 24   supergrid::go $
6290: 66 31 32 33 0a 20 20 20 20 73 75 70 65 72 67 72  f123.    supergr
62a0: 69 64 3a 3a 67 6f 20 24 66 32 31 0a 20 20 20 20  id::go $f21.    
62b0: 73 75 70 65 72 67 72 69 64 3a 3a 67 6f 20 24 66  supergrid::go $f
62c0: 33 32 31 0a 20 20 20 20 73 75 70 65 72 67 72 69  321.    supergri
62d0: 64 3a 3a 67 6f 20 24 66 33 32 32 0a 20 20 20 20  d::go $f322.    
62e0: 73 75 70 65 72 67 72 69 64 3a 3a 67 6f 20 24 66  supergrid::go $f
62f0: 33 32 33 0a 20 20 20 20 73 75 70 65 72 67 72 69  323.    supergri
6300: 64 3a 3a 67 6f 20 24 66 32 33 0a 20 20 20 20 73  d::go $f23.    s
6310: 75 70 65 72 67 72 69 64 3a 3a 67 6f 20 24 70 61  upergrid::go $pa
6320: 6e 65 32 0a 20 20 20 20 73 75 70 65 72 67 72 69  ne2.    supergri
6330: 64 3a 3a 67 6f 20 24 66 0a 0a 20 20 20 20 55 70  d::go $f..    Up
6340: 64 61 74 65 4c 69 6e 6b 74 61 62 73 0a 20 20 20  dateLinktabs.   
6350: 20 23 20 69 66 20 69 74 20 65 78 69 73 74 73 20   # if it exists 
6360: 66 72 6f 6d 20 62 65 66 6f 72 65 2c 20 69 74 20  from before, it 
6370: 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 0a  will be deleted.
6380: 20 20 20 20 74 72 61 63 65 20 76 64 65 6c 65 74      trace vdelet
6390: 65 20 3a 3a 63 70 72 6f 6a 65 63 74 3a 3a 6c 69  e ::cproject::li
63a0: 6e 6b 73 20 77 20 22 55 70 64 61 74 65 4c 69 6e  nks w "UpdateLin
63b0: 6b 74 61 62 73 20 3b 23 22 0a 20 20 20 20 74 72  ktabs ;#".    tr
63c0: 61 63 65 20 76 61 72 20 63 70 72 6f 6a 65 63 74  ace var cproject
63d0: 3a 3a 6c 69 6e 6b 73 20 77 20 22 55 70 64 61 74  ::links w "Updat
63e0: 65 4c 69 6e 6b 74 61 62 73 20 3b 23 22 0a 0a 0a  eLinktabs ;#"...
63f0: 20 20 20 20 55 70 64 61 74 65 53 63 72 69 70 74      UpdateScript
6400: 74 61 62 73 0a 20 20 20 20 23 20 69 66 20 69 74  tabs.    # if it
6410: 20 65 78 69 73 74 73 20 66 72 6f 6d 20 62 65 66   exists from bef
6420: 6f 72 65 2c 20 69 74 20 77 69 6c 6c 20 62 65 20  ore, it will be 
6430: 64 65 6c 65 74 65 64 0a 20 20 20 20 74 72 61 63  deleted.    trac
6440: 65 20 76 64 65 6c 65 74 65 20 3a 3a 63 70 72 6f  e vdelete ::cpro
6450: 6a 65 63 74 3a 3a 73 63 72 69 70 74 74 61 62 73  ject::scripttabs
6460: 20 77 20 22 55 70 64 61 74 65 53 63 72 69 70 74   w "UpdateScript
6470: 74 61 62 73 20 3b 23 22 0a 20 20 20 20 74 72 61  tabs ;#".    tra
6480: 63 65 20 76 61 72 20 63 70 72 6f 6a 65 63 74 3a  ce var cproject:
6490: 3a 73 63 72 69 70 74 74 61 62 73 20 77 20 22 55  :scripttabs w "U
64a0: 70 64 61 74 65 53 63 72 69 70 74 74 61 62 73 20  pdateScripttabs 
64b0: 3b 23 22 0a 0a 0a 20 20 20 20 62 69 6e 64 20 24  ;#"...    bind $
64c0: 77 20 3c 52 65 74 75 72 6e 3e 20 22 44 69 61 6c  w <Return> "Dial
64d0: 6f 67 57 69 6e 54 6f 70 3a 3a 49 6e 76 6f 6b 65  ogWinTop::Invoke
64e0: 4f 4b 20 24 66 22 0a 20 20 20 20 0a 20 20 20 20  OK $f".    .    
64f0: 44 69 61 6c 6f 67 57 69 6e 54 6f 70 3a 3a 43 72  DialogWinTop::Cr
6500: 65 61 74 65 57 69 6e 64 6f 77 20 24 66 20 22 22  eateWindow $f ""
6510: 20 22 22 20 35 30 30 0a 7d 0a 0a 70 72 6f 63 20   "" 500.}..proc 
6520: 63 70 72 6f 6a 65 63 74 3a 3a 55 70 64 61 74 65  cproject::Update
6530: 4c 69 6e 6b 74 61 62 73 20 7b 7d 20 7b 0a 20 20  Linktabs {} {.  
6540: 20 20 76 61 72 69 61 62 6c 65 20 6e 6f 74 65 62    variable noteb
6550: 6f 6f 6b 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ook.    variable
6560: 20 6c 69 6e 6b 73 0a 0a 20 20 20 20 69 66 20 7b   links..    if {
6570: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6e   ![info exists n
6580: 6f 74 65 62 6f 6f 6b 5d 20 7c 7c 20 21 5b 77 69  otebook] || ![wi
6590: 6e 66 6f 20 65 78 69 73 74 73 20 24 6e 6f 74 65  nfo exists $note
65a0: 62 6f 6f 6b 5d 20 7d 20 7b 20 72 65 74 75 72 6e  book] } { return
65b0: 20 7d 0a 20 20 20 20 69 66 20 7b 20 21 5b 69 6e   }.    if { ![in
65c0: 66 6f 20 65 78 69 73 74 73 20 6c 69 6e 6b 73 5d  fo exists links]
65d0: 20 7d 20 7b 20 73 65 74 20 6c 69 6e 6b 73 20 4c   } { set links L
65e0: 69 6e 6b 20 7d 0a 0a 20 20 20 20 73 65 74 20 70  ink }..    set p
65f0: 61 67 65 73 20 5b 24 6e 6f 74 65 62 6f 6f 6b 20  ages [$notebook 
6600: 70 61 67 65 73 20 31 20 65 6e 64 2d 31 5d 0a 0a  pages 1 end-1]..
6610: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 70      foreach i $p
6620: 61 67 65 73 20 7b 0a 09 69 66 20 7b 20 5b 73 74  ages {..if { [st
6630: 72 69 6e 67 20 6d 61 74 63 68 20 4c 69 6e 6b 2a  ring match Link*
6640: 20 24 69 5d 20 7d 20 7b 0a 09 20 20 20 20 24 6e   $i] } {..    $n
6650: 6f 74 65 62 6f 6f 6b 20 64 65 6c 65 74 65 20 24  otebook delete $
6660: 69 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66  i..}.    }.    f
6670: 6f 72 65 61 63 68 20 69 20 24 6c 69 6e 6b 73 20  oreach i $links 
6680: 7b 0a 09 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  {..regsub -all {
6690: 5c 57 7d 20 24 69 20 7b 58 7d 20 70 61 67 65 0a  \W} $i {X} page.
66a0: 09 73 65 74 20 66 20 5b 24 6e 6f 74 65 62 6f 6f  .set f [$noteboo
66b0: 6b 20 69 6e 73 65 72 74 20 65 6e 64 2d 31 20 24  k insert end-1 $
66c0: 70 61 67 65 20 2d 74 65 78 74 20 24 69 5d 0a 09  page -text $i]..
66d0: 41 64 64 4c 69 6e 6b 54 61 62 20 24 66 20 24 69  AddLinkTab $f $i
66e0: 0a 20 20 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 63  .    }.}..proc c
66f0: 70 72 6f 6a 65 63 74 3a 3a 41 64 64 47 72 6f 75  project::AddGrou
6700: 70 49 6e 4c 69 6e 6b 47 72 6f 75 70 73 20 7b 20  pInLinkGroups { 
6710: 62 75 74 20 65 6e 74 72 79 20 7d 20 7b 0a 20 20  but entry } {.  
6720: 20 20 76 61 72 69 61 62 6c 65 20 67 72 6f 75 70    variable group
6730: 73 0a 0a 20 20 20 20 73 65 74 20 6d 65 6e 75 20  s..    set menu 
6740: 24 62 75 74 2e 6d 65 6e 75 0a 20 20 20 20 63 61  $but.menu.    ca
6750: 74 63 68 20 7b 20 64 65 73 74 72 6f 79 20 24 6d  tch { destroy $m
6760: 65 6e 75 20 7d 0a 0a 20 20 20 20 6d 65 6e 75 20  enu }..    menu 
6770: 24 6d 65 6e 75 0a 20 20 20 20 66 6f 72 65 61 63  $menu.    foreac
6780: 68 20 69 20 24 67 72 6f 75 70 73 20 7b 0a 09 73  h i $groups {..s
6790: 65 74 20 63 6f 6d 6d 20 7b 0a 09 20 20 20 20 73  et comm {..    s
67a0: 65 74 20 73 74 72 20 5b 45 4e 54 52 59 20 67 65  et str [ENTRY ge
67b0: 74 5d 0a 09 20 20 20 20 61 70 70 65 6e 64 20 73  t]..    append s
67c0: 74 72 20 22 20 47 52 4f 55 50 22 0a 09 20 20 20  tr " GROUP"..   
67d0: 20 45 4e 54 52 59 20 64 65 6c 20 30 20 65 6e 64   ENTRY del 0 end
67e0: 0a 09 20 20 20 20 45 4e 54 52 59 20 69 6e 73 65  ..    ENTRY inse
67f0: 72 74 20 65 6e 64 20 5b 73 74 72 69 6e 67 20 74  rt end [string t
6800: 72 69 6d 20 24 73 74 72 5d 0a 09 7d 0a 09 73 65  rim $str]..}..se
6810: 74 20 63 6f 6d 6d 20 5b 73 74 72 69 6e 67 20 6d  t comm [string m
6820: 61 70 20 5b 6c 69 73 74 20 45 4e 54 52 59 20 24  ap [list ENTRY $
6830: 65 6e 74 72 79 20 47 52 4f 55 50 20 24 69 5d 20  entry GROUP $i] 
6840: 24 63 6f 6d 6d 5d 0a 09 24 6d 65 6e 75 20 61 64  $comm]..$menu ad
6850: 64 20 63 6f 6d 6d 61 6e 64 20 2d 6c 61 62 65 6c  d command -label
6860: 20 24 69 20 2d 63 6f 6d 6d 61 6e 64 20 24 63 6f   $i -command $co
6870: 6d 6d 0a 20 20 20 20 7d 0a 20 20 20 20 74 6b 5f  mm.    }.    tk_
6880: 70 6f 70 75 70 20 24 6d 65 6e 75 20 5b 77 69 6e  popup $menu [win
6890: 66 6f 20 72 6f 6f 74 78 20 24 62 75 74 5d 20 5b  fo rootx $but] [
68a0: 77 69 6e 66 6f 20 72 6f 6f 74 79 20 24 62 75 74  winfo rooty $but
68b0: 5d 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65  ].}..proc cproje
68c0: 63 74 3a 3a 41 64 64 4c 69 6e 6b 54 61 62 20 7b  ct::AddLinkTab {
68d0: 20 66 20 6c 69 6e 6b 20 7d 20 7b 0a 0a 20 20 20   f link } {..   
68e0: 20 54 69 74 6c 65 46 72 61 6d 65 20 24 66 2e 66   TitleFrame $f.f
68f0: 30 20 2d 74 65 78 74 20 22 6c 69 6e 6b 20 67 72  0 -text "link gr
6900: 6f 75 70 73 22 0a 20 20 20 20 73 65 74 20 66 30  oups".    set f0
6910: 20 5b 24 66 2e 66 30 20 67 65 74 66 72 61 6d 65   [$f.f0 getframe
6920: 5d 0a 20 20 20 20 65 6e 74 72 79 20 24 66 30 2e  ].    entry $f0.
6930: 65 20 2d 67 72 69 64 20 30 20 2d 74 65 78 74 76  e -grid 0 -textv
6940: 61 72 69 61 62 6c 65 20 63 70 72 6f 6a 65 63 74  ariable cproject
6950: 3a 3a 74 68 69 73 64 61 74 61 4c 28 24 6c 69 6e  ::thisdataL($lin
6960: 6b 2c 6c 69 6e 6b 67 72 6f 75 70 73 29 0a 0a 20  k,linkgroups).. 
6970: 20 20 20 4c 61 62 65 6c 20 24 66 30 2e 62 31 20     Label $f0.b1 
6980: 2d 69 6d 61 67 65 20 61 63 74 74 69 63 6b 31 36  -image acttick16
6990: 20 5c 0a 09 20 2d 68 69 67 68 6c 69 67 68 74 74   \.. -highlightt
69a0: 68 69 63 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65  hickness 0 -take
69b0: 66 6f 63 75 73 20 30 20 2d 72 65 6c 69 65 66 20  focus 0 -relief 
69c0: 66 6c 61 74 20 2d 62 6f 72 64 65 72 77 69 64 74  flat -borderwidt
69d0: 68 20 31 20 2d 70 61 64 78 20 31 20 2d 70 61 64  h 1 -padx 1 -pad
69e0: 79 20 31 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78  y 1 \.. -helptex
69f0: 74 20 5b 5f 20 22 41 64 64 20 67 72 6f 75 70 22  t [_ "Add group"
6a00: 5d 20 2d 67 72 69 64 20 31 0a 20 20 20 20 62 69  ] -grid 1.    bi
6a10: 6e 64 20 24 66 30 2e 62 31 20 3c 42 75 74 74 6f  nd $f0.b1 <Butto
6a20: 6e 50 72 65 73 73 2d 31 3e 20 22 63 70 72 6f 6a  nPress-1> "cproj
6a30: 65 63 74 3a 3a 41 64 64 47 72 6f 75 70 49 6e 4c  ect::AddGroupInL
6a40: 69 6e 6b 47 72 6f 75 70 73 20 24 66 30 2e 62 31  inkGroups $f0.b1
6a50: 20 24 66 30 2e 65 22 20 0a 0a 20 20 20 20 54 69   $f0.e" ..    Ti
6a60: 74 6c 65 46 72 61 6d 65 20 24 66 2e 66 31 20 2d  tleFrame $f.f1 -
6a70: 74 65 78 74 20 22 6c 69 62 72 61 72 69 65 73 20  text "libraries 
6a80: 64 69 72 65 63 74 6f 72 69 65 73 22 0a 20 20 20  directories".   
6a90: 20 73 65 74 20 66 31 20 5b 24 66 2e 66 31 20 67   set f1 [$f.f1 g
6aa0: 65 74 66 72 61 6d 65 5d 0a 0a 20 20 20 20 73 65  etframe]..    se
6ab0: 74 20 73 77 20 5b 53 63 72 6f 6c 6c 65 64 57 69  t sw [ScrolledWi
6ac0: 6e 64 6f 77 20 24 66 31 2e 6c 66 20 2d 72 65 6c  ndow $f1.lf -rel
6ad0: 69 65 66 20 73 75 6e 6b 65 6e 20 2d 62 6f 72 64  ief sunken -bord
6ae0: 65 72 77 69 64 74 68 20 30 5d 0a 20 20 20 20 6c  erwidth 0].    l
6af0: 69 73 74 62 6f 78 20 24 73 77 2e 6c 62 20 2d 6c  istbox $sw.lb -l
6b00: 69 73 74 76 61 72 69 61 62 6c 65 20 63 70 72 6f  istvariable cpro
6b10: 6a 65 63 74 3a 3a 74 68 69 73 64 61 74 61 4c 28  ject::thisdataL(
6b20: 24 6c 69 6e 6b 2c 6c 69 62 72 61 72 69 65 73 64  $link,librariesd
6b30: 69 72 73 29 0a 20 20 20 20 24 73 77 20 73 65 74  irs).    $sw set
6b40: 77 69 64 67 65 74 20 24 73 77 2e 6c 62 0a 0a 20  widget $sw.lb.. 
6b50: 20 20 20 73 65 74 20 62 62 6f 78 20 5b 42 75 74     set bbox [But
6b60: 74 6f 6e 42 6f 78 20 24 66 31 2e 62 62 6f 78 31  tonBox $f1.bbox1
6b70: 20 2d 73 70 61 63 69 6e 67 20 30 20 2d 70 61 64   -spacing 0 -pad
6b80: 78 20 31 20 2d 70 61 64 79 20 31 20 2d 68 6f 6d  x 1 -pady 1 -hom
6b90: 6f 67 65 6e 65 6f 75 73 20 31 5d 0a 20 20 20 20  ogeneous 1].    
6ba0: 24 62 62 6f 78 20 61 64 64 20 2d 69 6d 61 67 65  $bbox add -image
6bb0: 20 66 6f 6c 64 65 72 6f 70 65 6e 31 36 20 5c 0a   folderopen16 \.
6bc0: 09 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  . -highlightthic
6bd0: 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65 66 6f 63  kness 0 -takefoc
6be0: 75 73 20 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e  us 0 -relief lin
6bf0: 6b 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 31  k -borderwidth 1
6c00: 20 2d 70 61 64 78 20 31 20 2d 70 61 64 79 20 31   -padx 1 -pady 1
6c10: 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74 20 5b   \.. -helptext [
6c20: 5f 20 22 41 64 64 20 6c 69 6e 6b 20 64 69 72 65  _ "Add link dire
6c30: 63 74 6f 72 69 65 73 22 5d 20 5c 0a 09 20 2d 63  ctories"] \.. -c
6c40: 6f 6d 6d 61 6e 64 20 22 63 70 72 6f 6a 65 63 74  ommand "cproject
6c50: 3a 3a 41 64 64 44 65 6c 44 69 72 65 63 74 6f 72  ::AddDelDirector
6c60: 69 65 73 20 24 73 77 2e 6c 62 20 61 64 64 22 0a  ies $sw.lb add".
6c70: 20 20 20 20 24 62 62 6f 78 20 61 64 64 20 2d 69      $bbox add -i
6c80: 6d 61 67 65 20 61 63 74 63 72 6f 73 73 31 36 20  mage actcross16 
6c90: 5c 0a 09 20 2d 68 69 67 68 6c 69 67 68 74 74 68  \.. -highlightth
6ca0: 69 63 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65 66  ickness 0 -takef
6cb0: 6f 63 75 73 20 30 20 2d 72 65 6c 69 65 66 20 6c  ocus 0 -relief l
6cc0: 69 6e 6b 20 2d 62 6f 72 64 65 72 77 69 64 74 68  ink -borderwidth
6cd0: 20 31 20 2d 70 61 64 78 20 31 20 2d 70 61 64 79   1 -padx 1 -pady
6ce0: 20 31 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74   1 \.. -helptext
6cf0: 20 5b 5f 20 22 44 65 6c 65 74 65 20 6c 69 6e 6b   [_ "Delete link
6d00: 20 64 69 72 65 63 74 6f 72 69 65 73 22 5d 20 5c   directories"] \
6d10: 0a 09 20 2d 63 6f 6d 6d 61 6e 64 20 22 63 70 72  .. -command "cpr
6d20: 6f 6a 65 63 74 3a 3a 41 64 64 44 65 6c 44 69 72  oject::AddDelDir
6d30: 65 63 74 6f 72 69 65 73 20 24 73 77 2e 6c 62 20  ectories $sw.lb 
6d40: 64 65 6c 65 74 65 22 0a 0a 20 20 20 20 67 72 69  delete"..    gri
6d50: 64 20 24 66 31 2e 6c 66 20 2d 73 74 69 63 6b 79  d $f1.lf -sticky
6d60: 20 6e 73 65 77 0a 20 20 20 20 67 72 69 64 20 24   nsew.    grid $
6d70: 62 62 6f 78 20 2d 73 74 69 63 6b 79 20 6e 77 0a  bbox -sticky nw.
6d80: 20 20 20 20 67 72 69 64 20 72 6f 77 63 6f 6e 66      grid rowconf
6d90: 69 67 75 72 65 20 24 66 31 20 30 20 2d 77 65 69  igure $f1 0 -wei
6da0: 67 68 74 20 31 0a 20 20 20 20 67 72 69 64 20 63  ght 1.    grid c
6db0: 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65 20 24  olumnconfigure $
6dc0: 66 31 20 30 20 2d 77 65 69 67 68 74 20 31 0a 0a  f1 0 -weight 1..
6dd0: 20 20 20 20 54 69 74 6c 65 46 72 61 6d 65 20 24      TitleFrame $
6de0: 66 2e 66 32 20 2d 74 65 78 74 20 22 6c 69 62 72  f.f2 -text "libr
6df0: 61 72 69 65 73 22 0a 20 20 20 20 73 65 74 20 66  aries".    set f
6e00: 32 20 5b 24 66 2e 66 32 20 67 65 74 66 72 61 6d  2 [$f.f2 getfram
6e10: 65 5d 0a 0a 20 20 20 20 73 65 74 20 76 61 6c 75  e]..    set valu
6e20: 65 73 20 5b 6c 69 73 74 20 67 63 63 20 67 2b 2b  es [list gcc g++
6e30: 20 61 72 5d 0a 20 20 20 20 69 66 20 7b 20 24 3a   ar].    if { $:
6e40: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  :tcl_platform(pl
6e50: 61 74 66 6f 72 6d 29 20 3d 3d 20 22 77 69 6e 64  atform) == "wind
6e60: 6f 77 73 22 20 7d 20 7b 0a 09 6c 61 70 70 65 6e  ows" } {..lappen
6e70: 64 20 76 61 6c 75 65 73 20 77 69 6e 64 72 65 73  d values windres
6e80: 0a 20 20 20 20 7d 0a 20 20 20 20 43 6f 6d 62 6f  .    }.    Combo
6e90: 42 6f 78 20 24 66 32 2e 63 62 20 2d 74 65 78 74  Box $f2.cb -text
6ea0: 76 61 72 69 61 62 6c 65 20 63 70 72 6f 6a 65 63  variable cprojec
6eb0: 74 3a 3a 74 68 69 73 64 61 74 61 4c 28 24 6c 69  t::thisdataL($li
6ec0: 6e 6b 2c 6c 69 6e 6b 65 72 29 20 2d 76 61 6c 75  nk,linker) -valu
6ed0: 65 73 20 24 76 61 6c 75 65 73 20 5c 0a 09 2d 67  es $values \..-g
6ee0: 72 69 64 20 22 30 20 77 22 20 2d 77 69 64 74 68  rid "0 w" -width
6ef0: 20 37 0a 0a 20 20 20 20 65 6e 74 72 79 20 24 66   7..    entry $f
6f00: 32 2e 65 20 2d 67 72 69 64 20 31 20 2d 74 65 78  2.e -grid 1 -tex
6f10: 74 76 61 72 69 61 62 6c 65 20 63 70 72 6f 6a 65  tvariable cproje
6f20: 63 74 3a 3a 74 68 69 73 64 61 74 61 4c 28 24 6c  ct::thisdataL($l
6f30: 69 6e 6b 2c 6c 69 62 72 61 72 69 65 73 29 0a 0a  ink,libraries)..
6f40: 20 20 20 20 54 69 74 6c 65 46 72 61 6d 65 20 24      TitleFrame $
6f50: 66 2e 66 33 20 2d 74 65 78 74 20 22 61 64 64 69  f.f3 -text "addi
6f60: 74 69 6f 6e 61 6c 20 6c 69 6e 6b 20 66 6c 61 67  tional link flag
6f70: 73 22 0a 20 20 20 20 73 65 74 20 66 33 20 5b 24  s".    set f3 [$
6f80: 66 2e 66 33 20 67 65 74 66 72 61 6d 65 5d 0a 20  f.f3 getframe]. 
6f90: 20 20 20 65 6e 74 72 79 20 24 66 33 2e 65 20 2d     entry $f3.e -
6fa0: 67 72 69 64 20 30 20 2d 74 65 78 74 76 61 72 69  grid 0 -textvari
6fb0: 61 62 6c 65 20 63 70 72 6f 6a 65 63 74 3a 3a 74  able cproject::t
6fc0: 68 69 73 64 61 74 61 4c 28 24 6c 69 6e 6b 2c 6c  hisdataL($link,l
6fd0: 69 6e 6b 66 6c 61 67 73 29 0a 0a 20 20 20 20 54  inkflags)..    T
6fe0: 69 74 6c 65 46 72 61 6d 65 20 24 66 2e 66 34 20  itleFrame $f.f4 
6ff0: 2d 74 65 78 74 20 22 6f 75 74 70 75 74 20 6e 61  -text "output na
7000: 6d 65 22 0a 20 20 20 20 73 65 74 20 66 34 20 5b  me".    set f4 [
7010: 24 66 2e 66 34 20 67 65 74 66 72 61 6d 65 5d 0a  $f.f4 getframe].
7020: 20 20 20 20 65 6e 74 72 79 20 24 66 34 2e 65 20      entry $f4.e 
7030: 2d 67 72 69 64 20 30 20 2d 74 65 78 74 76 61 72  -grid 0 -textvar
7040: 69 61 62 6c 65 20 63 70 72 6f 6a 65 63 74 3a 3a  iable cproject::
7050: 74 68 69 73 64 61 74 61 4c 28 24 6c 69 6e 6b 2c  thisdataL($link,
7060: 6c 69 6e 6b 65 78 65 29 0a 0a 20 20 20 20 73 65  linkexe)..    se
7070: 74 20 62 62 6f 78 20 5b 42 75 74 74 6f 6e 42 6f  t bbox [ButtonBo
7080: 78 20 24 66 2e 62 62 6f 78 20 2d 73 70 61 63 69  x $f.bbox -spaci
7090: 6e 67 20 30 20 2d 70 61 64 78 20 31 20 2d 70 61  ng 0 -padx 1 -pa
70a0: 64 79 20 31 20 2d 68 6f 6d 6f 67 65 6e 65 6f 75  dy 1 -homogeneou
70b0: 73 20 31 20 2d 67 72 69 64 20 22 30 20 6e 77 22  s 1 -grid "0 nw"
70c0: 5d 0a 20 20 20 20 24 62 62 6f 78 20 61 64 64 20  ].    $bbox add 
70d0: 2d 69 6d 61 67 65 20 61 63 74 74 69 63 6b 31 36  -image acttick16
70e0: 20 5c 0a 09 20 2d 68 69 67 68 6c 69 67 68 74 74   \.. -highlightt
70f0: 68 69 63 6b 6e 65 73 73 20 30 20 2d 74 61 6b 65  hickness 0 -take
7100: 66 6f 63 75 73 20 30 20 2d 72 65 6c 69 65 66 20  focus 0 -relief 
7110: 6c 69 6e 6b 20 2d 62 6f 72 64 65 72 77 69 64 74  link -borderwidt
7120: 68 20 31 20 2d 70 61 64 78 20 31 20 2d 70 61 64  h 1 -padx 1 -pad
7130: 79 20 31 20 5c 0a 09 20 2d 68 65 6c 70 74 65 78  y 1 \.. -helptex
7140: 74 20 5b 5f 20 22 43 72 65 61 74 65 20 6e 65 77  t [_ "Create new
7150: 20 6c 69 6e 6b 20 74 61 62 22 5d 20 5c 0a 09 20   link tab"] \.. 
7160: 2d 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 63  -command [list c
7170: 70 72 6f 6a 65 63 74 3a 3a 43 72 65 61 74 65 44  project::CreateD
7180: 65 6c 65 74 65 4c 69 6e 6b 54 61 62 20 24 6c 69  eleteLinkTab $li
7190: 6e 6b 20 63 72 65 61 74 65 5d 0a 20 20 20 20 24  nk create].    $
71a0: 62 62 6f 78 20 61 64 64 20 2d 69 6d 61 67 65 20  bbox add -image 
71b0: 61 63 74 63 72 6f 73 73 31 36 20 5c 0a 09 20 2d  actcross16 \.. -
71c0: 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65  highlightthickne
71d0: 73 73 20 30 20 2d 74 61 6b 65 66 6f 63 75 73 20  ss 0 -takefocus 
71e0: 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e 6b 20 2d  0 -relief link -
71f0: 62 6f 72 64 65 72 77 69 64 74 68 20 31 20 2d 70  borderwidth 1 -p
7200: 61 64 78 20 31 20 2d 70 61 64 79 20 31 20 5c 0a  adx 1 -pady 1 \.
7210: 09 20 2d 68 65 6c 70 74 65 78 74 20 5b 5f 20 22  . -helptext [_ "
7220: 44 65 6c 65 74 65 20 6c 69 6e 6b 20 74 61 62 22  Delete link tab"
7230: 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e 64 20 5b  ] \.. -command [
7240: 6c 69 73 74 20 63 70 72 6f 6a 65 63 74 3a 3a 43  list cproject::C
7250: 72 65 61 74 65 44 65 6c 65 74 65 4c 69 6e 6b 54  reateDeleteLinkT
7260: 61 62 20 24 6c 69 6e 6b 20 64 65 6c 65 74 65 5d  ab $link delete]
7270: 0a 20 20 20 20 24 62 62 6f 78 20 61 64 64 20 2d  .    $bbox add -
7280: 69 6d 61 67 65 20 65 64 69 74 31 36 20 5c 0a 09  image edit16 \..
7290: 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b   -highlightthick
72a0: 6e 65 73 73 20 30 20 2d 74 61 6b 65 66 6f 63 75  ness 0 -takefocu
72b0: 73 20 30 20 2d 72 65 6c 69 65 66 20 6c 69 6e 6b  s 0 -relief link
72c0: 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 31 20   -borderwidth 1 
72d0: 2d 70 61 64 78 20 31 20 2d 70 61 64 79 20 31 20  -padx 1 -pady 1 
72e0: 5c 0a 09 20 2d 68 65 6c 70 74 65 78 74 20 5b 5f  \.. -helptext [_
72f0: 20 22 52 65 6e 61 6d 65 20 6c 69 6e 6b 20 74 61   "Rename link ta
7300: 62 22 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e 64  b"] \.. -command
7310: 20 5b 6c 69 73 74 20 63 70 72 6f 6a 65 63 74 3a   [list cproject:
7320: 3a 43 72 65 61 74 65 44 65 6c 65 74 65 4c 69 6e  :CreateDeleteLin
7330: 6b 54 61 62 20 24 6c 69 6e 6b 20 72 65 6e 61 6d  kTab $link renam
7340: 65 5d 0a 0a 20 20 20 20 67 72 69 64 20 24 66 2e  e]..    grid $f.
7350: 66 30 20 2d 73 74 69 63 6b 79 20 6e 65 77 0a 20  f0 -sticky new. 
7360: 20 20 20 67 72 69 64 20 24 66 2e 66 31 20 2d 73     grid $f.f1 -s
7370: 74 69 63 6b 79 20 6e 73 65 77 0a 20 20 20 20 67  ticky nsew.    g
7380: 72 69 64 20 24 66 2e 66 32 20 2d 73 74 69 63 6b  rid $f.f2 -stick
7390: 79 20 6e 65 77 0a 20 20 20 20 67 72 69 64 20 24  y new.    grid $
73a0: 66 2e 66 33 20 2d 73 74 69 63 6b 79 20 6e 65 77  f.f3 -sticky new
73b0: 0a 20 20 20 20 67 72 69 64 20 24 66 2e 66 34 20  .    grid $f.f4 
73c0: 2d 73 74 69 63 6b 79 20 6e 65 77 0a 20 20 20 20  -sticky new.    
73d0: 67 72 69 64 20 24 66 2e 62 62 6f 78 20 2d 73 74  grid $f.bbox -st
73e0: 69 63 6b 79 20 6e 77 0a 0a 20 20 20 20 67 72 69  icky nw..    gri
73f0: 64 20 72 6f 77 63 6f 6e 66 69 67 75 72 65 20 24  d rowconfigure $
7400: 66 20 31 20 2d 77 65 69 67 68 74 20 31 0a 20 20  f 1 -weight 1.  
7410: 20 20 67 72 69 64 20 63 6f 6c 75 6d 6e 63 6f 6e    grid columncon
7420: 66 69 67 75 72 65 20 24 66 20 30 20 2d 77 65 69  figure $f 0 -wei
7430: 67 68 74 20 31 0a 0a 0a 20 20 20 20 73 75 70 65  ght 1...    supe
7440: 72 67 72 69 64 3a 3a 67 6f 20 24 66 30 0a 20 20  rgrid::go $f0.  
7450: 20 20 73 75 70 65 72 67 72 69 64 3a 3a 67 6f 20    supergrid::go 
7460: 24 66 32 0a 20 20 20 20 73 75 70 65 72 67 72 69  $f2.    supergri
7470: 64 3a 3a 67 6f 20 24 66 33 0a 20 20 20 20 73 75  d::go $f3.    su
7480: 70 65 72 67 72 69 64 3a 3a 67 6f 20 24 66 34 0a  pergrid::go $f4.
7490: 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74  }..proc cproject
74a0: 3a 3a 43 72 65 61 74 65 44 65 6c 65 74 65 4c 69  ::CreateDeleteLi
74b0: 6e 6b 54 61 62 20 7b 20 63 75 72 72 65 6e 74 6c  nkTab { currentl
74c0: 69 6e 6b 20 77 68 61 74 20 7d 20 7b 0a 20 20 20  ink what } {.   
74d0: 20 76 61 72 69 61 62 6c 65 20 6c 69 6e 6b 73 0a   variable links.
74e0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74      variable dat
74f0: 61 4c 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  aL.    variable 
7500: 6e 6f 74 65 62 6f 6f 6b 0a 0a 20 20 20 20 73 79  notebook..    sy
7510: 6e 63 66 72 6f 6d 55 49 0a 0a 20 20 20 20 73 77  ncfromUI..    sw
7520: 69 74 63 68 20 24 77 68 61 74 20 7b 0a 09 63 72  itch $what {..cr
7530: 65 61 74 65 20 7b 0a 09 20 20 20 20 73 65 74 20  eate {..    set 
7540: 6e 75 6d 20 5b 65 78 70 72 20 5b 6c 6c 65 6e 67  num [expr [lleng
7550: 74 68 20 24 6c 69 6e 6b 73 5d 2b 31 5d 0a 09 20  th $links]+1].. 
7560: 20 20 20 73 65 74 20 6e 65 77 6c 69 6e 6b 20 4c     set newlink L
7570: 69 6e 6b 24 6e 75 6d 0a 09 20 20 20 20 66 6f 72  ink$num..    for
7580: 65 61 63 68 20 69 20 5b 61 72 72 61 79 20 6e 61  each i [array na
7590: 6d 65 73 20 64 61 74 61 4c 20 2a 2c 24 63 75 72  mes dataL *,$cur
75a0: 72 65 6e 74 6c 69 6e 6b 2c 2a 5d 20 7b 0a 09 09  rentlink,*] {...
75b0: 72 65 67 65 78 70 20 7b 28 5b 5e 2c 5d 2b 29 2c  regexp {([^,]+),
75c0: 5b 5e 2c 5d 2b 2c 28 5b 5e 2c 5d 2b 29 7d 20 24  [^,]+,([^,]+)} $
75d0: 69 20 7b 7d 20 64 72 20 76 0a 09 09 73 65 74 20  i {} dr v...set 
75e0: 64 61 74 61 4c 28 24 64 72 2c 24 6e 65 77 6c 69  dataL($dr,$newli
75f0: 6e 6b 2c 24 76 29 20 24 64 61 74 61 4c 28 24 69  nk,$v) $dataL($i
7600: 29 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 6c 61  )..    }..    la
7610: 70 70 65 6e 64 20 6c 69 6e 6b 73 20 24 6e 65 77  ppend links $new
7620: 6c 69 6e 6b 0a 09 20 20 20 20 24 6e 6f 74 65 62  link..    $noteb
7630: 6f 6f 6b 20 72 61 69 73 65 20 24 6e 65 77 6c 69  ook raise $newli
7640: 6e 6b 0a 09 7d 0a 09 64 65 6c 65 74 65 20 7b 0a  nk..}..delete {.
7650: 09 20 20 20 20 69 66 20 7b 20 5b 6c 6c 65 6e 67  .    if { [lleng
7660: 74 68 20 24 6c 69 6e 6b 73 5d 20 3d 3d 20 31 20  th $links] == 1 
7670: 7d 20 7b 0a 09 09 57 61 72 6e 57 69 6e 20 22 45  } {...WarnWin "E
7680: 72 72 6f 72 3a 20 54 68 65 72 65 20 6d 75 73 74  rror: There must
7690: 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   be at least one
76a0: 20 6c 69 6e 6b 20 74 61 62 22 20 24 6e 6f 74 65   link tab" $note
76b0: 62 6f 6f 6b 0a 09 09 72 65 74 75 72 6e 0a 09 20  book...return.. 
76c0: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 65     }..    set re
76d0: 74 20 5b 44 69 61 6c 6f 67 57 69 6e 3a 3a 6d 65  t [DialogWin::me
76e0: 73 73 61 67 65 42 6f 78 20 2d 64 65 66 61 75 6c  ssageBox -defaul
76f0: 74 20 6f 6b 20 2d 69 63 6f 6e 20 77 61 72 6e 69  t ok -icon warni
7700: 6e 67 20 2d 6d 65 73 73 61 67 65 20 5c 0a 09 09  ng -message \...
7710: 22 41 72 65 20 79 6f 75 20 73 75 72 65 20 74 6f  "Are you sure to
7720: 20 64 65 6c 65 74 65 20 6c 69 6e 6b 20 74 61 62   delete link tab
7730: 20 27 24 63 75 72 72 65 6e 74 6c 69 6e 6b 27 3f   '$currentlink'?
7740: 22 20 2d 70 61 72 65 6e 74 20 24 6e 6f 74 65 62  " -parent $noteb
7750: 6f 6f 6b 20 5c 0a 09 09 2d 74 69 74 6c 65 20 22  ook \...-title "
7760: 64 65 6c 65 74 65 20 6c 69 6e 6b 20 74 61 62 22  delete link tab"
7770: 20 2d 74 79 70 65 20 6f 6b 63 61 6e 63 65 6c 5d   -type okcancel]
7780: 0a 09 20 20 20 20 69 66 20 7b 20 24 72 65 74 20  ..    if { $ret 
7790: 3d 3d 20 22 63 61 6e 63 65 6c 22 20 7d 20 7b 20  == "cancel" } { 
77a0: 72 65 74 75 72 6e 20 7d 0a 09 20 20 20 20 0a 09  return }..    ..
77b0: 20 20 20 20 73 65 74 20 64 65 6c 70 6f 73 20 5b      set delpos [
77c0: 6c 73 65 61 72 63 68 20 24 6c 69 6e 6b 73 20 24  lsearch $links $
77d0: 63 75 72 72 65 6e 74 6c 69 6e 6b 5d 0a 0a 09 20  currentlink]... 
77e0: 20 20 20 66 6f 72 65 61 63 68 20 69 20 5b 61 72     foreach i [ar
77f0: 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61 4c 20  ray names dataL 
7800: 2a 2c 24 63 75 72 72 65 6e 74 6c 69 6e 6b 2c 2a  *,$currentlink,*
7810: 5d 20 7b 0a 09 09 75 6e 73 65 74 20 64 61 74 61  ] {...unset data
7820: 4c 28 24 69 29 0a 09 20 20 20 20 7d 0a 09 20 20  L($i)..    }..  
7830: 20 20 73 65 74 20 6c 69 6e 6b 73 20 5b 6c 72 65    set links [lre
7840: 70 6c 61 63 65 20 24 6c 69 6e 6b 73 20 24 64 65  place $links $de
7850: 6c 70 6f 73 20 24 64 65 6c 70 6f 73 5d 0a 09 20  lpos $delpos].. 
7860: 20 20 20 69 66 20 7b 20 24 64 65 6c 70 6f 73 20     if { $delpos 
7870: 3e 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e  >= [llength $lin
7880: 6b 73 5d 20 7d 20 7b 20 73 65 74 20 64 65 6c 70  ks] } { set delp
7890: 6f 73 20 30 20 7d 0a 09 20 20 20 20 24 6e 6f 74  os 0 }..    $not
78a0: 65 62 6f 6f 6b 20 72 61 69 73 65 20 5b 6c 69 6e  ebook raise [lin
78b0: 64 65 78 20 24 6c 69 6e 6b 73 20 24 64 65 6c 70  dex $links $delp
78c0: 6f 73 5d 0a 09 7d 0a 09 72 65 6e 61 6d 65 20 7b  os]..}..rename {
78d0: 0a 09 20 20 20 20 43 6f 70 79 4e 61 6d 65 73 70  ..    CopyNamesp
78e0: 61 63 65 20 3a 3a 44 69 61 6c 6f 67 57 69 6e 20  ace ::DialogWin 
78f0: 3a 3a 44 69 61 6c 6f 67 57 69 6e 43 52 0a 09 20  ::DialogWinCR.. 
7900: 20 20 20 73 65 74 20 66 20 5b 44 69 61 6c 6f 67     set f [Dialog
7910: 57 69 6e 43 52 3a 3a 49 6e 69 74 20 24 6e 6f 74  WinCR::Init $not
7920: 65 62 6f 6f 6b 20 22 45 6e 74 65 72 20 6c 69 6e  ebook "Enter lin
7930: 6b 20 6e 61 6d 65 22 20 73 65 70 61 72 61 74 6f  k name" separato
7940: 72 20 22 22 5d 0a 09 20 20 20 20 73 65 74 20 77  r ""]..    set w
7950: 20 5b 77 69 6e 66 6f 20 74 6f 70 6c 65 76 65 6c   [winfo toplevel
7960: 20 24 66 5d 0a 09 20 20 20 20 0a 09 20 20 20 20   $f]..    ..    
7970: 6c 61 62 65 6c 20 24 66 2e 6c 20 2d 74 65 78 74  label $f.l -text
7980: 20 22 45 6e 74 65 72 20 6e 65 77 20 6e 61 6d 65   "Enter new name
7990: 20 66 6f 72 20 6c 69 6e 6b 20 74 61 62 20 27 24   for link tab '$
79a0: 63 75 72 72 65 6e 74 6c 69 6e 6b 27 22 20 2d 67  currentlink'" -g
79b0: 72 69 64 20 22 30 20 70 78 33 20 70 79 33 22 0a  rid "0 px3 py3".
79c0: 09 20 20 20 20 65 6e 74 72 79 20 24 66 2e 65 20  .    entry $f.e 
79d0: 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 44 69  -textvariable Di
79e0: 61 6c 6f 67 57 69 6e 43 52 3a 3a 75 73 65 72 28  alogWinCR::user(
79f0: 6e 61 6d 65 29 20 2d 67 72 69 64 20 22 30 20 70  name) -grid "0 p
7a00: 78 31 30 20 70 79 33 22 20 2d 77 69 64 74 68 20  x10 py3" -width 
7a10: 33 30 0a 09 20 20 20 20 0a 09 20 20 20 20 73 65  30..    ..    se
7a20: 74 20 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a 75  t DialogWinCR::u
7a30: 73 65 72 28 6e 61 6d 65 29 20 24 63 75 72 72 65  ser(name) $curre
7a40: 6e 74 6c 69 6e 6b 0a 09 20 20 20 20 74 6b 54 61  ntlink..    tkTa
7a50: 62 54 6f 57 69 6e 64 6f 77 20 24 66 2e 65 0a 09  bToWindow $f.e..
7a60: 20 20 20 20 73 75 70 65 72 67 72 69 64 3a 3a 67      supergrid::g
7a70: 6f 20 24 66 0a 09 20 20 20 20 62 69 6e 64 20 24  o $f..    bind $
7a80: 77 20 3c 52 65 74 75 72 6e 3e 20 22 44 69 61 6c  w <Return> "Dial
7a90: 6f 67 57 69 6e 43 52 3a 3a 49 6e 76 6f 6b 65 4f  ogWinCR::InvokeO
7aa0: 4b 22 0a 0a 09 20 20 20 20 73 65 74 20 61 63 74  K"...    set act
7ab0: 69 6f 6e 20 5b 44 69 61 6c 6f 67 57 69 6e 43 52  ion [DialogWinCR
7ac0: 3a 3a 43 72 65 61 74 65 57 69 6e 64 6f 77 5d 0a  ::CreateWindow].
7ad0: 09 20 20 20 20 77 68 69 6c 65 20 31 20 7b 0a 09  .    while 1 {..
7ae0: 09 73 77 69 74 63 68 20 24 61 63 74 69 6f 6e 20  .switch $action 
7af0: 7b 0a 09 09 20 20 20 20 30 20 7b 0a 09 09 20 20  {...    0 {...  
7b00: 20 20 20 20 20 20 44 69 61 6c 6f 67 57 69 6e 43        DialogWinC
7b10: 52 3a 3a 44 65 73 74 72 6f 79 57 69 6e 64 6f 77  R::DestroyWindow
7b20: 0a 09 09 20 20 20 20 20 20 20 20 6e 61 6d 65 73  ...        names
7b30: 70 61 63 65 20 64 65 6c 65 74 65 20 3a 3a 44 69  pace delete ::Di
7b40: 61 6c 6f 67 57 69 6e 43 52 0a 09 09 20 20 20 20  alogWinCR...    
7b50: 20 20 20 20 72 65 74 75 72 6e 0a 09 09 20 20 20      return...   
7b60: 20 7d 0a 09 09 20 20 20 20 31 20 7b 0a 09 09 20   }...    1 {... 
7b70: 20 20 20 20 20 20 20 73 65 74 20 6e 65 77 6c 69         set newli
7b80: 6e 6b 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  nk [string trim 
7b90: 24 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a 75 73  $DialogWinCR::us
7ba0: 65 72 28 6e 61 6d 65 29 5d 0a 09 09 20 20 20 20  er(name)]...    
7bb0: 20 20 20 20 69 66 20 7b 20 24 6e 65 77 6c 69 6e      if { $newlin
7bc0: 6b 20 3d 3d 20 22 22 20 7d 20 7b 0a 09 09 20 20  k == "" } {...  
7bd0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 65            set ne
7be0: 77 6c 69 6e 6b 20 22 4c 69 6e 6b 22 0a 09 09 20  wlink "Link"... 
7bf0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20         } elseif 
7c00: 7b 20 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  { ![string match
7c10: 20 22 4c 69 6e 6b 20 2a 22 20 24 6e 65 77 6c 69   "Link *" $newli
7c20: 6e 6b 5d 20 7d 20 7b 0a 09 09 20 20 20 20 20 20  nk] } {...      
7c30: 20 20 20 20 20 20 73 65 74 20 6e 65 77 6c 69 6e        set newlin
7c40: 6b 20 22 4c 69 6e 6b 20 24 6e 65 77 6c 69 6e 6b  k "Link $newlink
7c50: 22 0a 09 09 20 20 20 20 20 20 20 20 7d 0a 09 09  "...        }...
7c60: 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 6e 65          if { $ne
7c70: 77 6c 69 6e 6b 20 3d 3d 20 22 22 20 7d 20 7b 0a  wlink == "" } {.
7c80: 09 09 20 20 20 20 20 20 20 20 20 20 20 20 57 61  ..            Wa
7c90: 72 6e 57 69 6e 20 22 4c 69 6e 6b 20 74 61 62 20  rnWin "Link tab 
7ca0: 6e 61 6d 65 20 63 61 6e 6e 6f 74 20 62 65 20 76  name cannot be v
7cb0: 6f 69 64 22 20 24 77 0a 09 09 20 20 20 20 20 20  oid" $w...      
7cc0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b 6c 73    } elseif { [ls
7cd0: 65 61 72 63 68 20 24 6c 69 6e 6b 73 20 24 6e 65  earch $links $ne
7ce0: 77 6c 69 6e 6b 5d 20 21 3d 20 2d 31 20 7d 20 7b  wlink] != -1 } {
7cf0: 0a 09 09 20 20 20 20 20 20 20 20 20 20 20 20 57  ...            W
7d00: 61 72 6e 57 69 6e 20 22 4c 69 6e 6b 20 74 61 62  arnWin "Link tab
7d10: 20 6e 61 6d 65 20 27 24 6e 65 77 6c 69 6e 6b 27   name '$newlink'
7d20: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 22   already exists"
7d30: 20 24 77 0a 09 09 20 20 20 20 20 20 20 20 7d 20   $w...        } 
7d40: 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 20 20 20  else {...       
7d50: 20 20 20 20 20 44 69 61 6c 6f 67 57 69 6e 43 52       DialogWinCR
7d60: 3a 3a 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 0a  ::DestroyWindow.
7d70: 09 09 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ..            na
7d80: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 3a  mespace delete :
7d90: 3a 44 69 61 6c 6f 67 57 69 6e 43 52 0a 09 09 20  :DialogWinCR... 
7da0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
7db0: 0a 09 09 20 20 20 20 20 20 20 20 7d 0a 09 09 20  ...        }... 
7dc0: 20 20 20 7d 0a 09 09 7d 0a 09 09 73 65 74 20 61     }...}...set a
7dd0: 63 74 69 6f 6e 20 5b 44 69 61 6c 6f 67 57 69 6e  ction [DialogWin
7de0: 43 52 3a 3a 57 61 69 74 46 6f 72 57 69 6e 64 6f  CR::WaitForWindo
7df0: 77 5d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73  w]..    }..    s
7e00: 65 74 20 70 6f 73 20 5b 6c 73 65 61 72 63 68 20  et pos [lsearch 
7e10: 24 6c 69 6e 6b 73 20 24 63 75 72 72 65 6e 74 6c  $links $currentl
7e20: 69 6e 6b 5d 0a 09 20 20 20 20 66 6f 72 65 61 63  ink]..    foreac
7e30: 68 20 69 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  h i [array names
7e40: 20 64 61 74 61 4c 20 2a 2c 24 63 75 72 72 65 6e   dataL *,$curren
7e50: 74 6c 69 6e 6b 2c 2a 5d 20 7b 0a 09 09 72 65 67  tlink,*] {...reg
7e60: 65 78 70 20 7b 28 5b 5e 2c 5d 2b 29 2c 5b 5e 2c  exp {([^,]+),[^,
7e70: 5d 2b 2c 28 5b 5e 2c 5d 2b 29 7d 20 24 69 20 7b  ]+,([^,]+)} $i {
7e80: 7d 20 64 72 20 76 0a 09 09 73 65 74 20 64 61 74  } dr v...set dat
7e90: 61 4c 28 24 64 72 2c 24 6e 65 77 6c 69 6e 6b 2c  aL($dr,$newlink,
7ea0: 24 76 29 20 24 64 61 74 61 4c 28 24 69 29 0a 09  $v) $dataL($i)..
7eb0: 09 75 6e 73 65 74 20 64 61 74 61 4c 28 24 69 29  .unset dataL($i)
7ec0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 74  ..    }..    set
7ed0: 20 6c 69 6e 6b 73 20 5b 6c 72 65 70 6c 61 63 65   links [lreplace
7ee0: 20 24 6c 69 6e 6b 73 20 24 70 6f 73 20 24 70 6f   $links $pos $po
7ef0: 73 20 24 6e 65 77 6c 69 6e 6b 5d 0a 09 7d 0a 20  s $newlink]..}. 
7f00: 20 20 20 7d 0a 20 20 20 20 73 79 6e 63 74 6f 55     }.    synctoU
7f10: 49 0a 7d 0a 0a 0a 70 72 6f 63 20 63 70 72 6f 6a  I.}...proc cproj
7f20: 65 63 74 3a 3a 55 70 64 61 74 65 53 63 72 69 70  ect::UpdateScrip
7f30: 74 74 61 62 73 20 7b 7d 20 7b 0a 20 20 20 20 76  ttabs {} {.    v
7f40: 61 72 69 61 62 6c 65 20 6e 6f 74 65 62 6f 6f 6b  ariable notebook
7f50: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 63  .    variable sc
7f60: 72 69 70 74 74 61 62 73 0a 0a 20 20 20 20 69 66  ripttabs..    if
7f70: 20 7b 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73   { ![info exists
7f80: 20 6e 6f 74 65 62 6f 6f 6b 5d 20 7c 7c 20 21 5b   notebook] || ![
7f90: 77 69 6e 66 6f 20 65 78 69 73 74 73 20 24 6e 6f  winfo exists $no
7fa0: 74 65 62 6f 6f 6b 5d 20 7d 20 7b 20 72 65 74 75  tebook] } { retu
7fb0: 72 6e 20 7d 0a 20 20 20 20 69 66 20 7b 20 21 5b  rn }.    if { ![
7fc0: 69 6e 66 6f 20 65 78 69 73 74 73 20 73 63 72 69  info exists scri
7fd0: 70 74 74 61 62 73 5d 20 7d 20 7b 20 73 65 74 20  pttabs] } { set 
7fe0: 73 63 72 69 70 74 74 61 62 73 20 53 63 72 69 70  scripttabs Scrip
7ff0: 74 20 7d 0a 0a 20 20 20 20 73 65 74 20 70 61 67  t }..    set pag
8000: 65 73 20 5b 24 6e 6f 74 65 62 6f 6f 6b 20 70 61  es [$notebook pa
8010: 67 65 73 20 31 20 65 6e 64 2d 31 5d 0a 0a 20 20  ges 1 end-1]..  
8020: 20 20 66 6f 72 65 61 63 68 20 69 20 24 70 61 67    foreach i $pag
8030: 65 73 20 7b 0a 09 69 66 20 7b 20 5b 73 74 72 69  es {..if { [stri
8040: 6e 67 20 6d 61 74 63 68 20 53 63 72 69 70 74 2a  ng match Script*
8050: 20 24 69 5d 20 7d 20 7b 0a 09 20 20 20 20 24 6e   $i] } {..    $n
8060: 6f 74 65 62 6f 6f 6b 20 64 65 6c 65 74 65 20 24  otebook delete $
8070: 69 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66  i..}.    }.    f
8080: 6f 72 65 61 63 68 20 69 20 24 73 63 72 69 70 74  oreach i $script
8090: 74 61 62 73 20 7b 0a 09 72 65 67 73 75 62 20 2d  tabs {..regsub -
80a0: 61 6c 6c 20 7b 5c 57 7d 20 24 69 20 7b 58 7d 20  all {\W} $i {X} 
80b0: 70 61 67 65 0a 09 73 65 74 20 66 20 5b 24 6e 6f  page..set f [$no
80c0: 74 65 62 6f 6f 6b 20 69 6e 73 65 72 74 20 65 6e  tebook insert en
80d0: 64 2d 31 20 24 70 61 67 65 20 2d 74 65 78 74 20  d-1 $page -text 
80e0: 24 69 5d 0a 09 41 64 64 53 63 72 69 70 74 74 61  $i]..AddScriptta
80f0: 62 20 24 66 20 24 69 0a 20 20 20 20 7d 0a 7d 0a  b $f $i.    }.}.
8100: 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a  .proc cproject::
8110: 53 63 72 69 70 74 54 61 62 43 6f 6c 6f 72 69 7a  ScriptTabColoriz
8120: 65 20 7b 20 74 78 74 20 63 6f 6d 6d 61 6e 64 20  e { txt command 
8130: 61 72 67 73 20 7d 20 7b 0a 20 20 20 20 0a 20 20  args } {.    .  
8140: 20 20 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b    if { [regexp {
8150: 5e 28 69 6e 73 7c 64 65 6c 29 7d 20 24 63 6f 6d  ^(ins|del)} $com
8160: 6d 61 6e 64 5d 20 7d 20 7b 0a 09 52 61 6d 44 65  mand] } {..RamDe
8170: 62 75 67 67 65 72 3a 3a 43 6f 6c 6f 72 69 7a 65  bugger::Colorize
8180: 53 6c 6f 77 20 24 74 78 74 0a 20 20 20 20 7d 0a  Slow $txt.    }.
8190: 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74  }..proc cproject
81a0: 3a 3a 41 64 64 53 63 72 69 70 74 74 61 62 20 7b  ::AddScripttab {
81b0: 20 66 20 73 63 72 69 70 74 74 61 62 20 7d 20 7b   f scripttab } {
81c0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 69  .    variable li
81d0: 6e 6b 73 0a 20 20 20 20 76 61 72 69 61 62 6c 65  nks.    variable
81e0: 20 64 65 62 75 67 72 65 6c 65 61 73 65 0a 0a 20   debugrelease.. 
81f0: 20 20 20 54 69 74 6c 65 46 72 61 6d 65 20 24 66     TitleFrame $f
8200: 2e 66 30 20 2d 74 65 78 74 20 22 63 6f 6e 74 65  .f0 -text "conte
8210: 6e 74 73 22 20 2d 67 72 69 64 20 22 30 20 6e 65  nts" -grid "0 ne
8220: 77 73 22 0a 20 20 20 20 73 65 74 20 66 30 20 5b  ws".    set f0 [
8230: 24 66 2e 66 30 20 67 65 74 66 72 61 6d 65 5d 0a  $f.f0 getframe].
8240: 0a 20 20 20 20 73 65 74 20 68 65 6c 70 74 65 78  .    set helptex
8250: 74 20 22 22 0a 20 20 20 20 61 70 70 65 6e 64 20  t "".    append 
8260: 68 65 6c 70 74 65 78 74 20 22 23 20 49 74 20 69  helptext "# It i
8270: 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 69 6e  s possible to in
8280: 63 6c 75 64 65 20 61 20 54 43 4c 20 73 63 72 69  clude a TCL scri
8290: 70 74 20 68 65 72 65 5c 6e 22 0a 20 20 20 20 61  pt here\n".    a
82a0: 70 70 65 6e 64 20 68 65 6c 70 74 65 78 74 20 22  ppend helptext "
82b0: 23 20 69 74 20 77 69 6c 6c 20 62 65 20 65 78 65  # it will be exe
82c0: 63 75 74 65 64 20 65 69 74 68 65 72 20 61 75 74  cuted either aut
82d0: 6f 6d 61 74 69 63 61 6c 6c 79 20 6f 72 5c 6e 22  omatically or\n"
82e0: 0a 20 20 20 20 61 70 70 65 6e 64 20 68 65 6c 70  .    append help
82f0: 74 65 78 74 20 22 23 20 6d 61 6e 75 61 6c 6c 79  text "# manually
8300: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  , depending on c
8310: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 49 6e  onfiguration. In
8320: 20 74 68 69 73 5c 6e 22 0a 20 20 20 20 61 70 70   this\n".    app
8330: 65 6e 64 20 68 65 6c 70 74 65 78 74 20 22 23 20  end helptext "# 
8340: 6c 61 74 74 65 72 20 63 61 73 65 2c 20 69 74 20  latter case, it 
8350: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 75  is possible to u
8360: 73 65 20 69 74 20 61 73 20 61 20 4e 4f 54 45 53  se it as a NOTES
8370: 5c 6e 22 0a 20 20 20 20 61 70 70 65 6e 64 20 68  \n".    append h
8380: 65 6c 70 74 65 78 74 20 22 23 20 73 74 6f 72 61  elptext "# stora
8390: 67 65 20 70 6c 61 63 65 5c 6e 5c 6e 22 0a 20 20  ge place\n\n".  
83a0: 20 20 61 70 70 65 6e 64 20 68 65 6c 70 74 65 78    append helptex
83b0: 74 20 22 23 20 41 56 41 49 4c 41 42 4c 45 20 56  t "# AVAILABLE V
83c0: 41 52 49 41 42 4c 45 53 5c 6e 22 0a 20 20 20 20  ARIABLES\n".    
83d0: 61 70 70 65 6e 64 20 68 65 6c 70 74 65 78 74 20  append helptext 
83e0: 22 23 20 5c 24 50 72 6f 6a 65 63 74 44 69 72 3a  "# \$ProjectDir:
83f0: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77   the directory w
8400: 68 65 72 65 20 74 68 65 20 70 72 6f 6a 65 63 74  here the project
8410: 20 69 73 5c 6e 22 0a 20 20 20 20 61 70 70 65 6e   is\n".    appen
8420: 64 20 68 65 6c 70 74 65 78 74 20 22 23 20 5c 24  d helptext "# \$
8430: 4f 62 6a 65 63 74 73 44 69 72 3a 20 74 68 65 20  ObjectsDir: the 
8440: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where 
8450: 74 68 65 20 6f 62 6a 65 63 74 20 66 69 6c 65 73  the object files
8460: 20 61 72 65 5c 6e 22 0a 0a 20 20 20 20 73 65 74   are\n"..    set
8470: 20 73 77 20 5b 53 63 72 6f 6c 6c 65 64 57 69 6e   sw [ScrolledWin
8480: 64 6f 77 20 24 66 30 2e 6c 66 20 2d 72 65 6c 69  dow $f0.lf -reli
8490: 65 66 20 73 75 6e 6b 65 6e 20 2d 62 6f 72 64 65  ef sunken -borde
84a0: 72 77 69 64 74 68 20 30 20 2d 67 72 69 64 20 22  rwidth 0 -grid "
84b0: 30 20 6e 73 65 77 22 5d 0a 20 20 20 20 73 75 70  0 nsew"].    sup
84c0: 65 72 74 65 78 74 3a 3a 74 65 78 74 20 24 73 77  ertext::text $sw
84d0: 2e 74 65 78 74 20 2d 77 72 61 70 20 6e 6f 6e 65  .text -wrap none
84e0: 20 2d 73 79 6e 63 76 61 72 20 63 70 72 6f 6a 65   -syncvar cproje
84f0: 63 74 3a 3a 74 68 69 73 64 61 74 61 53 28 24 73  ct::thisdataS($s
8500: 63 72 69 70 74 74 61 62 2c 73 63 72 69 70 74 29  cripttab,script)
8510: 20 5c 0a 09 20 20 20 20 2d 68 65 69 67 68 74 20   \..    -height 
8520: 34 20 2d 62 67 20 77 68 69 74 65 20 2d 70 6f 73  4 -bg white -pos
8530: 74 70 72 6f 63 20 22 63 70 72 6f 6a 65 63 74 3a  tproc "cproject:
8540: 3a 53 63 72 69 70 74 54 61 62 43 6f 6c 6f 72 69  :ScriptTabColori
8550: 7a 65 20 24 73 77 2e 74 65 78 74 22 0a 20 20 20  ze $sw.text".   
8560: 20 24 73 77 20 73 65 74 77 69 64 67 65 74 20 24   $sw setwidget $
8570: 73 77 2e 74 65 78 74 0a 0a 20 20 20 20 62 69 6e  sw.text..    bin
8580: 64 20 24 73 77 2e 74 65 78 74 20 3c 52 65 74 75  d $sw.text <Retu
8590: 72 6e 3e 20 22 5b 62 69 6e 64 20 54 65 78 74 20  rn> "[bind Text 
85a0: 3c 52 65 74 75 72 6e 3e 5d 20 3b 62 72 65 61 6b  <Return>] ;break
85b0: 22 0a 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69  "..    foreach i
85c0: 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 70   [array names cp
85d0: 72 6f 6a 65 63 74 3a 3a 64 61 74 61 53 20 2a 2c  roject::dataS *,
85e0: 73 63 72 69 70 74 5d 20 7b 0a 09 69 66 20 7b 20  script] {..if { 
85f0: 24 63 70 72 6f 6a 65 63 74 3a 3a 64 61 74 61 53  $cproject::dataS
8600: 28 24 69 29 20 3d 3d 20 22 68 65 6c 70 22 20 7d  ($i) == "help" }
8610: 20 7b 0a 09 20 20 20 20 73 65 74 20 63 70 72 6f   {..    set cpro
8620: 6a 65 63 74 3a 3a 64 61 74 61 53 28 24 69 29 20  ject::dataS($i) 
8630: 24 68 65 6c 70 74 65 78 74 0a 09 7d 0a 20 20 20  $helptext..}.   
8640: 20 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69   }.    foreach i
8650: 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 70   [array names cp
8660: 72 6f 6a 65 63 74 3a 3a 64 61 74 61 53 20 24 64  roject::dataS $d
8670: 65 62 75 67 72 65 6c 65 61 73 65 2c 2a 2c 73 63  ebugrelease,*,sc
8680: 72 69 70 74 5d 20 7b 0a 09 72 65 67 65 78 70 20  ript] {..regexp 
8690: 7b 5e 5b 5e 2c 5d 2b 2c 28 2e 2a 29 7d 20 24 69  {^[^,]+,(.*)} $i
86a0: 20 7b 7d 20 70 72 6f 70 0a 09 73 65 74 20 63 70   {} prop..set cp
86b0: 72 6f 6a 65 63 74 3a 3a 74 68 69 73 64 61 74 61  roject::thisdata
86c0: 53 28 24 70 72 6f 70 29 20 24 63 70 72 6f 6a 65  S($prop) $cproje
86d0: 63 74 3a 3a 64 61 74 61 53 28 24 69 29 0a 20 20  ct::dataS($i).  
86e0: 20 20 7d 0a 20 20 20 20 69 66 20 7b 20 24 63 70    }.    if { $cp
86f0: 72 6f 6a 65 63 74 3a 3a 74 68 69 73 64 61 74 61  roject::thisdata
8700: 53 28 24 73 63 72 69 70 74 74 61 62 2c 73 63 72  S($scripttab,scr
8710: 69 70 74 29 20 3d 3d 20 22 68 65 6c 70 22 20 7d  ipt) == "help" }
8720: 20 7b 0a 09 73 65 74 20 63 70 72 6f 6a 65 63 74   {..set cproject
8730: 3a 3a 74 68 69 73 64 61 74 61 53 28 24 73 63 72  ::thisdataS($scr
8740: 69 70 74 74 61 62 2c 73 63 72 69 70 74 29 20 24  ipttab,script) $
8750: 68 65 6c 70 74 65 78 74 0a 20 20 20 20 7d 0a 0a  helptext.    }..
8760: 20 20 20 20 73 65 74 20 62 62 6f 78 20 5b 42 75      set bbox [Bu
8770: 74 74 6f 6e 42 6f 78 20 24 66 30 2e 62 62 6f 78  ttonBox $f0.bbox
8780: 31 20 2d 73 70 61 63 69 6e 67 20 30 20 2d 70 61  1 -spacing 0 -pa
8790: 64 78 20 31 20 2d 70 61 64 79 20 31 20 2d 68 6f  dx 1 -pady 1 -ho
87a0: 6d 6f 67 65 6e 65 6f 75 73 20 31 20 2d 67 72 69  mogeneous 1 -gri
87b0: 64 20 22 30 20 77 6e 22 5d 0a 20 20 20 20 24 62  d "0 wn"].    $b
87c0: 62 6f 78 20 61 64 64 20 2d 69 6d 61 67 65 20 61  box add -image a
87d0: 63 74 74 69 63 6b 31 36 20 5c 0a 09 20 2d 68 69  cttick16 \.. -hi
87e0: 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
87f0: 20 30 20 2d 74 61 6b 65 66 6f 63 75 73 20 30 20   0 -takefocus 0 
8800: 2d 72 65 6c 69 65 66 20 6c 69 6e 6b 20 2d 62 6f  -relief link -bo
8810: 72 64 65 72 77 69 64 74 68 20 31 20 2d 70 61 64  rderwidth 1 -pad
8820: 78 20 31 20 2d 70 61 64 79 20 31 20 5c 0a 09 20  x 1 -pady 1 \.. 
8830: 2d 68 65 6c 70 74 65 78 74 20 5b 5f 20 22 43 6c  -helptext [_ "Cl
8840: 65 61 72 20 74 65 78 74 20 61 6e 64 20 61 64 64  ear text and add
8850: 20 68 65 6c 70 22 5d 20 5c 0a 09 20 2d 63 6f 6d   help"] \.. -com
8860: 6d 61 6e 64 20 22 5b 6c 69 73 74 20 24 73 77 2e  mand "[list $sw.
8870: 74 65 78 74 20 64 65 6c 20 31 2e 30 20 65 6e 64  text del 1.0 end
8880: 5d 20 3b 20 5b 6c 69 73 74 20 24 73 77 2e 74 65  ] ; [list $sw.te
8890: 78 74 20 69 6e 73 20 65 6e 64 20 24 68 65 6c 70  xt ins end $help
88a0: 74 65 78 74 5d 22 0a 20 20 20 20 24 62 62 6f 78  text]".    $bbox
88b0: 20 61 64 64 20 2d 69 6d 61 67 65 20 61 63 74 63   add -image actc
88c0: 72 6f 73 73 31 36 20 5c 0a 09 20 2d 68 69 67 68  ross16 \.. -high
88d0: 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20 30  lightthickness 0
88e0: 20 2d 74 61 6b 65 66 6f 63 75 73 20 30 20 2d 72   -takefocus 0 -r
88f0: 65 6c 69 65 66 20 6c 69 6e 6b 20 2d 62 6f 72 64  elief link -bord
8900: 65 72 77 69 64 74 68 20 31 20 2d 70 61 64 78 20  erwidth 1 -padx 
8910: 31 20 2d 70 61 64 79 20 31 20 5c 0a 09 20 2d 68  1 -pady 1 \.. -h
8920: 65 6c 70 74 65 78 74 20 5b 5f 20 22 43 6c 65 61  elptext [_ "Clea
8930: 72 20 74 65 78 74 22 5d 20 5c 0a 09 20 2d 63 6f  r text"] \.. -co
8940: 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 24 73 77 2e  mmand [list $sw.
8950: 74 65 78 74 20 64 65 6c 20 31 2e 30 20 65 6e 64  text del 1.0 end
8960: 5d 0a 0a 20 20 20 20 54 69 74 6c 65 46 72 61 6d  ]..    TitleFram
8970: 65 20 24 66 2e 66 31 20 2d 74 65 78 74 20 22 65  e $f.f1 -text "e
8980: 78 65 63 75 74 65 20 77 68 65 6e 22 20 2d 67 72  xecute when" -gr
8990: 69 64 20 22 30 20 6e 22 0a 20 20 20 20 73 65 74  id "0 n".    set
89a0: 20 66 31 20 5b 24 66 2e 66 31 20 67 65 74 66 72   f1 [$f.f1 getfr
89b0: 61 6d 65 5d 0a 0a 20 20 20 20 73 65 74 20 76 61  ame]..    set va
89c0: 6c 75 65 73 20 5b 6c 69 73 74 20 22 42 65 66 6f  lues [list "Befo
89d0: 72 65 20 63 6f 6d 70 69 6c 65 22 20 22 41 66 74  re compile" "Aft
89e0: 65 72 20 63 6f 6d 70 69 6c 65 22 5d 0a 20 20 20  er compile"].   
89f0: 20 66 6f 72 65 61 63 68 20 69 20 24 6c 69 6e 6b   foreach i $link
8a00: 73 20 7b 0a 09 6c 61 70 70 65 6e 64 20 76 61 6c  s {..lappend val
8a10: 75 65 73 20 22 41 66 74 65 72 20 24 69 22 0a 20  ues "After $i". 
8a20: 20 20 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64     }.    lappend
8a30: 20 76 61 6c 75 65 73 20 2d 2d 2d 20 22 4e 6f 20   values --- "No 
8a40: 61 75 74 6f 6d 61 74 69 63 22 0a 0a 20 20 20 20  automatic"..    
8a50: 6c 61 62 65 6c 20 24 66 31 2e 6c 20 2d 74 65 78  label $f1.l -tex
8a60: 74 20 22 45 78 65 63 75 74 65 20 73 63 72 69 70  t "Execute scrip
8a70: 74 3a 22 20 2d 67 72 69 64 20 30 0a 20 20 20 20  t:" -grid 0.    
8a80: 43 6f 6d 62 6f 42 6f 78 20 24 66 31 2e 63 62 20  ComboBox $f1.cb 
8a90: 2d 65 64 69 74 61 62 6c 65 20 30 20 2d 74 65 78  -editable 0 -tex
8aa0: 74 76 61 72 69 61 62 6c 65 20 63 70 72 6f 6a 65  tvariable cproje
8ab0: 63 74 3a 3a 74 68 69 73 64 61 74 61 53 28 24 73  ct::thisdataS($s
8ac0: 63 72 69 70 74 74 61 62 2c 65 78 65 63 75 74 65  cripttab,execute
8ad0: 74 69 6d 65 29 20 5c 0a 09 20 20 20 20 2d 76 61  time) \..    -va
8ae0: 6c 75 65 73 20 24 76 61 6c 75 65 73 20 2d 67 72  lues $values -gr
8af0: 69 64 20 31 0a 0a 20 20 20 20 62 75 74 74 6f 6e  id 1..    button
8b00: 20 24 66 31 2e 62 20 2d 74 65 78 74 20 22 45 78   $f1.b -text "Ex
8b10: 65 63 75 74 65 20 6e 6f 77 22 20 2d 77 69 64 74  ecute now" -widt
8b20: 68 20 31 35 20 2d 67 72 69 64 20 22 30 20 32 20  h 15 -grid "0 2 
8b30: 70 79 33 22 20 2d 63 6f 6d 6d 61 6e 64 20 5c 0a  py3" -command \.
8b40: 09 20 20 20 20 22 63 70 72 6f 6a 65 63 74 3a 3a  .    "cproject::
8b50: 73 79 6e 63 66 72 6f 6d 55 49 3b 20 63 70 72 6f  syncfromUI; cpro
8b60: 6a 65 63 74 3a 3a 45 76 61 6c 53 63 72 69 70 74  ject::EvalScript
8b70: 20 24 66 20 5c 24 63 70 72 6f 6a 65 63 74 3a 3a   $f \$cproject::
8b80: 64 65 62 75 67 72 65 6c 65 61 73 65 20 5c 0a 09  debugrelease \..
8b90: 20 20 20 20 5b 6c 69 73 74 20 24 73 63 72 69 70      [list $scrip
8ba0: 74 74 61 62 5d 20 31 22 0a 20 20 20 20 0a 20 20  ttab] 1".    .  
8bb0: 20 20 73 65 74 20 62 62 6f 78 20 5b 42 75 74 74    set bbox [Butt
8bc0: 6f 6e 42 6f 78 20 24 66 2e 62 62 6f 78 20 2d 73  onBox $f.bbox -s
8bd0: 70 61 63 69 6e 67 20 30 20 2d 70 61 64 78 20 31  pacing 0 -padx 1
8be0: 20 2d 70 61 64 79 20 31 20 2d 68 6f 6d 6f 67 65   -pady 1 -homoge
8bf0: 6e 65 6f 75 73 20 31 20 2d 67 72 69 64 20 22 30  neous 1 -grid "0
8c00: 20 6e 77 22 5d 0a 20 20 20 20 24 62 62 6f 78 20   nw"].    $bbox 
8c10: 61 64 64 20 2d 69 6d 61 67 65 20 61 63 74 74 69  add -image actti
8c20: 63 6b 31 36 20 5c 0a 09 20 2d 68 69 67 68 6c 69  ck16 \.. -highli
8c30: 67 68 74 74 68 69 63 6b 6e 65 73 73 20 30 20 2d  ghtthickness 0 -
8c40: 74 61 6b 65 66 6f 63 75 73 20 30 20 2d 72 65 6c  takefocus 0 -rel
8c50: 69 65 66 20 6c 69 6e 6b 20 2d 62 6f 72 64 65 72  ief link -border
8c60: 77 69 64 74 68 20 31 20 2d 70 61 64 78 20 31 20  width 1 -padx 1 
8c70: 2d 70 61 64 79 20 31 20 5c 0a 09 20 2d 68 65 6c  -pady 1 \.. -hel
8c80: 70 74 65 78 74 20 5b 5f 20 22 43 72 65 61 74 65  ptext [_ "Create
8c90: 20 6e 65 77 20 73 63 72 69 70 74 20 74 61 62 22   new script tab"
8ca0: 5d 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e 64 20 5b  ] \.. -command [
8cb0: 6c 69 73 74 20 63 70 72 6f 6a 65 63 74 3a 3a 43  list cproject::C
8cc0: 72 65 61 74 65 44 65 6c 65 74 65 53 63 72 69 70  reateDeleteScrip
8cd0: 74 54 61 62 20 24 73 63 72 69 70 74 74 61 62 20  tTab $scripttab 
8ce0: 63 72 65 61 74 65 5d 0a 20 20 20 20 24 62 62 6f  create].    $bbo
8cf0: 78 20 61 64 64 20 2d 69 6d 61 67 65 20 61 63 74  x add -image act
8d00: 63 72 6f 73 73 31 36 20 5c 0a 09 20 2d 68 69 67  cross16 \.. -hig
8d10: 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20  hlightthickness 
8d20: 30 20 2d 74 61 6b 65 66 6f 63 75 73 20 30 20 2d  0 -takefocus 0 -
8d30: 72 65 6c 69 65 66 20 6c 69 6e 6b 20 2d 62 6f 72  relief link -bor
8d40: 64 65 72 77 69 64 74 68 20 31 20 2d 70 61 64 78  derwidth 1 -padx
8d50: 20 31 20 2d 70 61 64 79 20 31 20 5c 0a 09 20 2d   1 -pady 1 \.. -
8d60: 68 65 6c 70 74 65 78 74 20 5b 5f 20 22 44 65 6c  helptext [_ "Del
8d70: 65 74 65 20 73 63 72 69 70 74 20 74 61 62 22 5d  ete script tab"]
8d80: 20 5c 0a 09 20 2d 63 6f 6d 6d 61 6e 64 20 5b 6c   \.. -command [l
8d90: 69 73 74 20 63 70 72 6f 6a 65 63 74 3a 3a 43 72  ist cproject::Cr
8da0: 65 61 74 65 44 65 6c 65 74 65 53 63 72 69 70 74  eateDeleteScript
8db0: 54 61 62 20 24 73 63 72 69 70 74 74 61 62 20 64  Tab $scripttab d
8dc0: 65 6c 65 74 65 5d 0a 20 20 20 20 24 62 62 6f 78  elete].    $bbox
8dd0: 20 61 64 64 20 2d 69 6d 61 67 65 20 65 64 69 74   add -image edit
8de0: 31 36 20 5c 0a 09 20 2d 68 69 67 68 6c 69 67 68  16 \.. -highligh
8df0: 74 74 68 69 63 6b 6e 65 73 73 20 30 20 2d 74 61  tthickness 0 -ta
8e00: 6b 65 66 6f 63 75 73 20 30 20 2d 72 65 6c 69 65  kefocus 0 -relie
8e10: 66 20 6c 69 6e 6b 20 2d 62 6f 72 64 65 72 77 69  f link -borderwi
8e20: 64 74 68 20 31 20 2d 70 61 64 78 20 31 20 2d 70  dth 1 -padx 1 -p
8e30: 61 64 79 20 31 20 5c 0a 09 20 2d 68 65 6c 70 74  ady 1 \.. -helpt
8e40: 65 78 74 20 5b 5f 20 22 52 65 6e 61 6d 65 20 73  ext [_ "Rename s
8e50: 63 72 69 70 74 20 74 61 62 22 5d 20 5c 0a 09 20  cript tab"] \.. 
8e60: 2d 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 63  -command [list c
8e70: 70 72 6f 6a 65 63 74 3a 3a 43 72 65 61 74 65 44  project::CreateD
8e80: 65 6c 65 74 65 53 63 72 69 70 74 54 61 62 20 24  eleteScriptTab $
8e90: 73 63 72 69 70 74 74 61 62 20 72 65 6e 61 6d 65  scripttab rename
8ea0: 5d 0a 0a 0a 20 20 20 20 73 75 70 65 72 67 72 69  ]...    supergri
8eb0: 64 3a 3a 67 6f 20 24 66 30 0a 20 20 20 20 73 75  d::go $f0.    su
8ec0: 70 65 72 67 72 69 64 3a 3a 67 6f 20 24 66 31 0a  pergrid::go $f1.
8ed0: 20 20 20 20 73 75 70 65 72 67 72 69 64 3a 3a 67      supergrid::g
8ee0: 6f 20 24 66 0a 7d 0a 0a 70 72 6f 63 20 63 70 72  o $f.}..proc cpr
8ef0: 6f 6a 65 63 74 3a 3a 43 72 65 61 74 65 44 65 6c  oject::CreateDel
8f00: 65 74 65 53 63 72 69 70 74 54 61 62 20 7b 20 63  eteScriptTab { c
8f10: 75 72 72 65 6e 74 73 63 72 69 70 74 74 61 62 20  urrentscripttab 
8f20: 77 68 61 74 20 7d 20 7b 0a 20 20 20 20 76 61 72  what } {.    var
8f30: 69 61 62 6c 65 20 73 63 72 69 70 74 74 61 62 73  iable scripttabs
8f40: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61  .    variable da
8f50: 74 61 53 0a 20 20 20 20 76 61 72 69 61 62 6c 65  taS.    variable
8f60: 20 6e 6f 74 65 62 6f 6f 6b 0a 0a 20 20 20 20 73   notebook..    s
8f70: 79 6e 63 66 72 6f 6d 55 49 0a 0a 20 20 20 20 73  yncfromUI..    s
8f80: 77 69 74 63 68 20 24 77 68 61 74 20 7b 0a 09 63  witch $what {..c
8f90: 72 65 61 74 65 20 7b 0a 09 20 20 20 20 73 65 74  reate {..    set
8fa0: 20 6e 75 6d 20 5b 65 78 70 72 20 5b 6c 6c 65 6e   num [expr [llen
8fb0: 67 74 68 20 24 73 63 72 69 70 74 74 61 62 73 5d  gth $scripttabs]
8fc0: 2b 31 5d 0a 09 20 20 20 20 73 65 74 20 6e 65 77  +1]..    set new
8fd0: 73 63 72 69 70 74 74 61 62 20 53 63 72 69 70 74  scripttab Script
8fe0: 24 6e 75 6d 0a 09 20 20 20 20 66 6f 72 65 61 63  $num..    foreac
8ff0: 68 20 69 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  h i [array names
9000: 20 64 61 74 61 53 20 2a 2c 24 63 75 72 72 65 6e   dataS *,$curren
9010: 74 73 63 72 69 70 74 74 61 62 2c 2a 5d 20 7b 0a  tscripttab,*] {.
9020: 09 09 72 65 67 65 78 70 20 7b 28 5b 5e 2c 5d 2b  ..regexp {([^,]+
9030: 29 2c 5b 5e 2c 5d 2b 2c 28 5b 5e 2c 5d 2b 29 7d  ),[^,]+,([^,]+)}
9040: 20 24 69 20 7b 7d 20 64 72 20 76 0a 09 09 73 65   $i {} dr v...se
9050: 74 20 64 61 74 61 53 28 24 64 72 2c 24 6e 65 77  t dataS($dr,$new
9060: 73 63 72 69 70 74 74 61 62 2c 24 76 29 20 24 64  scripttab,$v) $d
9070: 61 74 61 53 28 24 69 29 0a 09 20 20 20 20 7d 0a  ataS($i)..    }.
9080: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 73 63 72  .    lappend scr
9090: 69 70 74 74 61 62 73 20 24 6e 65 77 73 63 72 69  ipttabs $newscri
90a0: 70 74 74 61 62 0a 09 20 20 20 20 24 6e 6f 74 65  pttab..    $note
90b0: 62 6f 6f 6b 20 72 61 69 73 65 20 24 6e 65 77 73  book raise $news
90c0: 63 72 69 70 74 74 61 62 0a 09 7d 0a 09 64 65 6c  cripttab..}..del
90d0: 65 74 65 20 7b 0a 09 20 20 20 20 69 66 20 7b 20  ete {..    if { 
90e0: 5b 6c 6c 65 6e 67 74 68 20 24 73 63 72 69 70 74  [llength $script
90f0: 74 61 62 73 5d 20 3d 3d 20 31 20 7d 20 7b 0a 09  tabs] == 1 } {..
9100: 09 57 61 72 6e 57 69 6e 20 22 45 72 72 6f 72 3a  .WarnWin "Error:
9110: 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
9120: 74 20 6c 65 61 73 74 20 6f 6e 65 20 53 63 72 69  t least one Scri
9130: 70 74 20 74 61 62 22 20 24 6e 6f 74 65 62 6f 6f  pt tab" $noteboo
9140: 6b 0a 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20  k...return..    
9150: 7d 0a 09 20 20 20 20 73 65 74 20 72 65 74 20 5b  }..    set ret [
9160: 44 69 61 6c 6f 67 57 69 6e 3a 3a 6d 65 73 73 61  DialogWin::messa
9170: 67 65 42 6f 78 20 2d 64 65 66 61 75 6c 74 20 6f  geBox -default o
9180: 6b 20 2d 69 63 6f 6e 20 77 61 72 6e 69 6e 67 20  k -icon warning 
9190: 2d 6d 65 73 73 61 67 65 20 5c 0a 09 09 22 41 72  -message \..."Ar
91a0: 65 20 79 6f 75 20 73 75 72 65 20 74 6f 20 64 65  e you sure to de
91b0: 6c 65 74 65 20 73 63 72 69 70 74 20 74 61 62 20  lete script tab 
91c0: 27 24 63 75 72 72 65 6e 74 73 63 72 69 70 74 74  '$currentscriptt
91d0: 61 62 27 3f 22 20 2d 70 61 72 65 6e 74 20 24 6e  ab'?" -parent $n
91e0: 6f 74 65 62 6f 6f 6b 20 5c 0a 09 09 2d 74 69 74  otebook \...-tit
91f0: 6c 65 20 22 64 65 6c 65 74 65 20 73 63 72 69 70  le "delete scrip
9200: 74 20 74 61 62 22 20 2d 74 79 70 65 20 6f 6b 63  t tab" -type okc
9210: 61 6e 63 65 6c 5d 0a 09 20 20 20 20 69 66 20 7b  ancel]..    if {
9220: 20 24 72 65 74 20 3d 3d 20 22 63 61 6e 63 65 6c   $ret == "cancel
9230: 22 20 7d 20 7b 20 72 65 74 75 72 6e 20 7d 0a 09  " } { return }..
9240: 20 20 20 20 0a 09 20 20 20 20 73 65 74 20 64 65      ..    set de
9250: 6c 70 6f 73 20 5b 6c 73 65 61 72 63 68 20 24 73  lpos [lsearch $s
9260: 63 72 69 70 74 74 61 62 73 20 24 63 75 72 72 65  cripttabs $curre
9270: 6e 74 73 63 72 69 70 74 74 61 62 5d 0a 0a 09 20  ntscripttab]... 
9280: 20 20 20 66 6f 72 65 61 63 68 20 69 20 5b 61 72     foreach i [ar
9290: 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61 53 20  ray names dataS 
92a0: 2a 2c 24 63 75 72 72 65 6e 74 73 63 72 69 70 74  *,$currentscript
92b0: 74 61 62 2c 2a 5d 20 7b 0a 09 09 75 6e 73 65 74  tab,*] {...unset
92c0: 20 64 61 74 61 53 28 24 69 29 0a 09 20 20 20 20   dataS($i)..    
92d0: 7d 0a 09 20 20 20 20 73 65 74 20 73 63 72 69 70  }..    set scrip
92e0: 74 74 61 62 73 20 5b 6c 72 65 70 6c 61 63 65 20  ttabs [lreplace 
92f0: 24 73 63 72 69 70 74 74 61 62 73 20 24 64 65 6c  $scripttabs $del
9300: 70 6f 73 20 24 64 65 6c 70 6f 73 5d 0a 09 20 20  pos $delpos]..  
9310: 20 20 69 66 20 7b 20 24 64 65 6c 70 6f 73 20 3e    if { $delpos >
9320: 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 73 63 72 69  = [llength $scri
9330: 70 74 74 61 62 73 5d 20 7d 20 7b 20 73 65 74 20  pttabs] } { set 
9340: 64 65 6c 70 6f 73 20 30 20 7d 0a 09 20 20 20 20  delpos 0 }..    
9350: 24 6e 6f 74 65 62 6f 6f 6b 20 72 61 69 73 65 20  $notebook raise 
9360: 5b 6c 69 6e 64 65 78 20 24 24 73 63 72 69 70 74  [lindex $$script
9370: 74 61 62 73 64 20 24 64 65 6c 70 6f 73 5d 0a 09  tabsd $delpos]..
9380: 7d 0a 09 72 65 6e 61 6d 65 20 7b 0a 09 20 20 20  }..rename {..   
9390: 20 43 6f 70 79 4e 61 6d 65 73 70 61 63 65 20 3a   CopyNamespace :
93a0: 3a 44 69 61 6c 6f 67 57 69 6e 20 3a 3a 44 69 61  :DialogWin ::Dia
93b0: 6c 6f 67 57 69 6e 43 52 0a 09 20 20 20 20 73 65  logWinCR..    se
93c0: 74 20 66 20 5b 44 69 61 6c 6f 67 57 69 6e 43 52  t f [DialogWinCR
93d0: 3a 3a 49 6e 69 74 20 24 6e 6f 74 65 62 6f 6f 6b  ::Init $notebook
93e0: 20 22 45 6e 74 65 72 20 73 63 72 69 70 74 20 74   "Enter script t
93f0: 61 62 20 6e 61 6d 65 22 20 73 65 70 61 72 61 74  ab name" separat
9400: 6f 72 20 22 22 5d 0a 09 20 20 20 20 73 65 74 20  or ""]..    set 
9410: 77 20 5b 77 69 6e 66 6f 20 74 6f 70 6c 65 76 65  w [winfo topleve
9420: 6c 20 24 66 5d 0a 09 20 20 20 20 0a 09 20 20 20  l $f]..    ..   
9430: 20 6c 61 62 65 6c 20 24 66 2e 6c 20 2d 74 65 78   label $f.l -tex
9440: 74 20 22 45 6e 74 65 72 20 6e 65 77 20 6e 61 6d  t "Enter new nam
9450: 65 20 66 6f 72 20 73 63 72 69 70 74 20 74 61 62  e for script tab
9460: 20 27 24 63 75 72 72 65 6e 74 73 63 72 69 70 74   '$currentscript
9470: 74 61 62 27 22 20 2d 67 72 69 64 20 22 30 20 70  tab'" -grid "0 p
9480: 78 33 20 70 79 33 22 0a 09 20 20 20 20 65 6e 74  x3 py3"..    ent
9490: 72 79 20 24 66 2e 65 20 2d 74 65 78 74 76 61 72  ry $f.e -textvar
94a0: 69 61 62 6c 65 20 44 69 61 6c 6f 67 57 69 6e 43  iable DialogWinC
94b0: 52 3a 3a 75 73 65 72 28 6e 61 6d 65 29 20 2d 67  R::user(name) -g
94c0: 72 69 64 20 22 30 20 70 78 31 30 20 70 79 33 22  rid "0 px10 py3"
94d0: 20 2d 77 69 64 74 68 20 33 30 0a 09 20 20 20 20   -width 30..    
94e0: 0a 09 20 20 20 20 73 65 74 20 44 69 61 6c 6f 67  ..    set Dialog
94f0: 57 69 6e 43 52 3a 3a 75 73 65 72 28 6e 61 6d 65  WinCR::user(name
9500: 29 20 24 63 75 72 72 65 6e 74 73 63 72 69 70 74  ) $currentscript
9510: 74 61 62 0a 09 20 20 20 20 74 6b 54 61 62 54 6f  tab..    tkTabTo
9520: 57 69 6e 64 6f 77 20 24 66 2e 65 0a 09 20 20 20  Window $f.e..   
9530: 20 73 75 70 65 72 67 72 69 64 3a 3a 67 6f 20 24   supergrid::go $
9540: 66 0a 09 20 20 20 20 62 69 6e 64 20 24 77 20 3c  f..    bind $w <
9550: 52 65 74 75 72 6e 3e 20 22 44 69 61 6c 6f 67 57  Return> "DialogW
9560: 69 6e 43 52 3a 3a 49 6e 76 6f 6b 65 4f 4b 22 0a  inCR::InvokeOK".
9570: 0a 09 20 20 20 20 73 65 74 20 61 63 74 69 6f 6e  ..    set action
9580: 20 5b 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a 43   [DialogWinCR::C
9590: 72 65 61 74 65 57 69 6e 64 6f 77 5d 0a 09 20 20  reateWindow]..  
95a0: 20 20 77 68 69 6c 65 20 31 20 7b 0a 09 09 73 77    while 1 {...sw
95b0: 69 74 63 68 20 24 61 63 74 69 6f 6e 20 7b 0a 09  itch $action {..
95c0: 09 20 20 20 20 30 20 7b 0a 09 09 20 20 20 20 20  .    0 {...     
95d0: 20 20 20 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a     DialogWinCR::
95e0: 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 0a 09 09  DestroyWindow...
95f0: 20 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63          namespac
9600: 65 20 64 65 6c 65 74 65 20 3a 3a 44 69 61 6c 6f  e delete ::Dialo
9610: 67 57 69 6e 43 52 0a 09 09 20 20 20 20 20 20 20  gWinCR...       
9620: 20 72 65 74 75 72 6e 0a 09 09 20 20 20 20 7d 0a   return...    }.
9630: 09 09 20 20 20 20 31 20 7b 0a 09 09 20 20 20 20  ..    1 {...    
9640: 20 20 20 20 73 65 74 20 6e 65 77 73 63 72 69 70      set newscrip
9650: 74 74 61 62 20 5b 73 74 72 69 6e 67 20 74 72 69  ttab [string tri
9660: 6d 20 24 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a  m $DialogWinCR::
9670: 75 73 65 72 28 6e 61 6d 65 29 5d 0a 09 09 20 20  user(name)]...  
9680: 20 20 20 20 20 20 69 66 20 7b 20 24 6e 65 77 73        if { $news
9690: 63 72 69 70 74 74 61 62 20 3d 3d 20 22 22 20 7d  cripttab == "" }
96a0: 20 7b 0a 09 09 20 20 20 20 20 20 20 20 20 20 20   {...           
96b0: 20 73 65 74 20 6e 65 77 73 63 72 69 70 74 74 61   set newscriptta
96c0: 62 20 22 53 63 72 69 70 74 22 0a 09 09 20 20 20  b "Script"...   
96d0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20       } elseif { 
96e0: 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22  ![string match "
96f0: 53 63 72 69 70 74 20 2a 22 20 24 6e 65 77 73 63  Script *" $newsc
9700: 72 69 70 74 74 61 62 5d 20 7d 20 7b 0a 09 09 20  ripttab] } {... 
9710: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e             set n
9720: 65 77 73 63 72 69 70 74 74 61 62 20 22 53 63 72  ewscripttab "Scr
9730: 69 70 74 20 24 6e 65 77 73 63 72 69 70 74 74 61  ipt $newscriptta
9740: 62 22 0a 09 09 20 20 20 20 20 20 20 20 7d 0a 09  b"...        }..
9750: 09 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 6e  .        if { $n
9760: 65 77 73 63 72 69 70 74 74 61 62 20 3d 3d 20 22  ewscripttab == "
9770: 22 20 7d 20 7b 0a 09 09 20 20 20 20 20 20 20 20  " } {...        
9780: 20 20 20 20 57 61 72 6e 57 69 6e 20 22 53 63 72      WarnWin "Scr
9790: 69 70 74 20 74 61 62 20 6e 61 6d 65 20 63 61 6e  ipt tab name can
97a0: 6e 6f 74 20 62 65 20 76 6f 69 64 22 20 24 77 0a  not be void" $w.
97b0: 09 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
97c0: 69 66 20 7b 20 5b 6c 73 65 61 72 63 68 20 24 73  if { [lsearch $s
97d0: 63 72 69 70 74 74 61 62 73 20 24 6e 65 77 73 63  cripttabs $newsc
97e0: 72 69 70 74 74 61 62 5d 20 21 3d 20 2d 31 20 7d  ripttab] != -1 }
97f0: 20 7b 0a 09 09 20 20 20 20 20 20 20 20 20 20 20   {...           
9800: 20 57 61 72 6e 57 69 6e 20 22 53 63 72 69 70 74   WarnWin "Script
9810: 20 74 61 62 20 6e 61 6d 65 20 27 24 6e 65 77 73   tab name '$news
9820: 63 72 69 70 74 74 61 62 27 20 61 6c 72 65 61 64  cripttab' alread
9830: 79 20 65 78 69 73 74 73 22 20 24 77 0a 09 09 20  y exists" $w... 
9840: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
9850: 09 09 20 20 20 20 20 20 20 20 20 20 20 20 44 69  ..            Di
9860: 61 6c 6f 67 57 69 6e 43 52 3a 3a 44 65 73 74 72  alogWinCR::Destr
9870: 6f 79 57 69 6e 64 6f 77 0a 09 09 20 20 20 20 20  oyWindow...     
9880: 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65         namespace
9890: 20 64 65 6c 65 74 65 20 3a 3a 44 69 61 6c 6f 67   delete ::Dialog
98a0: 57 69 6e 43 52 0a 09 09 20 20 20 20 20 20 20 20  WinCR...        
98b0: 20 20 20 20 62 72 65 61 6b 0a 09 09 20 20 20 20      break...    
98c0: 20 20 20 20 7d 0a 09 09 20 20 20 20 7d 0a 09 09      }...    }...
98d0: 7d 0a 09 09 73 65 74 20 61 63 74 69 6f 6e 20 5b  }...set action [
98e0: 44 69 61 6c 6f 67 57 69 6e 43 52 3a 3a 57 61 69  DialogWinCR::Wai
98f0: 74 46 6f 72 57 69 6e 64 6f 77 5d 0a 09 20 20 20  tForWindow]..   
9900: 20 7d 0a 09 20 20 20 20 73 65 74 20 70 6f 73 20   }..    set pos 
9910: 5b 6c 73 65 61 72 63 68 20 24 73 63 72 69 70 74  [lsearch $script
9920: 74 61 62 73 20 24 63 75 72 72 65 6e 74 73 63 72  tabs $currentscr
9930: 69 70 74 74 61 62 5d 0a 09 20 20 20 20 66 6f 72  ipttab]..    for
9940: 65 61 63 68 20 69 20 5b 61 72 72 61 79 20 6e 61  each i [array na
9950: 6d 65 73 20 64 61 74 61 53 20 2a 2c 24 63 75 72  mes dataS *,$cur
9960: 72 65 6e 74 73 63 72 69 70 74 74 61 62 2c 2a 5d  rentscripttab,*]
9970: 20 7b 0a 09 09 72 65 67 65 78 70 20 7b 28 5b 5e   {...regexp {([^
9980: 2c 5d 2b 29 2c 5b 5e 2c 5d 2b 2c 28 5b 5e 2c 5d  ,]+),[^,]+,([^,]
9990: 2b 29 7d 20 24 69 20 7b 7d 20 64 72 20 76 0a 09  +)} $i {} dr v..
99a0: 09 73 65 74 20 64 61 74 61 53 28 24 64 72 2c 24  .set dataS($dr,$
99b0: 6e 65 77 73 63 72 69 70 74 74 61 62 2c 24 76 29  newscripttab,$v)
99c0: 20 24 64 61 74 61 53 28 24 69 29 0a 09 09 75 6e   $dataS($i)...un
99d0: 73 65 74 20 64 61 74 61 53 28 24 69 29 0a 09 20  set dataS($i).. 
99e0: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 73 63     }..    set sc
99f0: 72 69 70 74 74 61 62 73 20 5b 6c 72 65 70 6c 61  ripttabs [lrepla
9a00: 63 65 20 24 73 63 72 69 70 74 74 61 62 73 20 24  ce $scripttabs $
9a10: 70 6f 73 20 24 70 6f 73 20 24 6e 65 77 73 63 72  pos $pos $newscr
9a20: 69 70 74 74 61 62 5d 0a 09 7d 0a 20 20 20 20 7d  ipttab]..}.    }
9a30: 0a 20 20 20 20 73 79 6e 63 74 6f 55 49 0a 7d 0a  .    synctoUI.}.
9a40: 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a  .proc cproject::
9a50: 41 72 65 46 69 6c 65 73 45 71 75 61 6c 20 7b 20  AreFilesEqual { 
9a60: 66 69 6c 65 31 20 66 69 6c 65 32 20 7d 20 7b 0a  file1 file2 } {.
9a70: 20 20 20 20 0a 20 20 20 20 69 66 20 7b 20 24 3a      .    if { $:
9a80: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  :tcl_platform(pl
9a90: 61 74 66 6f 72 6d 29 20 3d 3d 20 22 77 69 6e 64  atform) == "wind
9aa0: 6f 77 73 22 20 7d 20 7b 0a 09 72 65 74 75 72 6e  ows" } {..return
9ab0: 20 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 2d   [string equal -
9ac0: 6e 6f 63 61 73 65 20 24 66 69 6c 65 31 20 24 66  nocase $file1 $f
9ad0: 69 6c 65 32 5d 0a 20 20 20 20 7d 20 65 6c 73 65  ile2].    } else
9ae0: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69   {..return [stri
9af0: 6e 67 20 65 71 75 61 6c 20 24 66 69 6c 65 31 20  ng equal $file1 
9b00: 24 66 69 6c 65 32 5d 0a 20 20 20 20 7d 0a 7d 0a  $file2].    }.}.
9b10: 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a  .proc cproject::
9b20: 43 6f 6e 76 65 72 74 54 6f 52 65 6c 61 74 69 76  ConvertToRelativ
9b30: 65 20 7b 20 64 69 72 20 66 69 6c 65 20 7d 20 7b  e { dir file } {
9b40: 0a 0a 20 20 20 20 73 65 74 20 6c 69 73 74 31 20  ..    set list1 
9b50: 5b 66 69 6c 65 20 73 70 6c 69 74 20 24 64 69 72  [file split $dir
9b60: 5d 0a 20 20 20 20 73 65 74 20 6c 69 73 74 32 20  ].    set list2 
9b70: 5b 66 69 6c 65 20 73 70 6c 69 74 20 24 66 69 6c  [file split $fil
9b80: 65 5d 0a 0a 20 20 20 20 66 6f 72 20 7b 20 73 65  e]..    for { se
9b90: 74 20 69 20 30 20 7d 20 7b 20 24 69 20 3c 20 5b  t i 0 } { $i < [
9ba0: 6c 6c 65 6e 67 74 68 20 24 6c 69 73 74 32 5d 20  llength $list2] 
9bb0: 7d 20 7b 20 69 6e 63 72 20 69 20 7d 20 7b 0a 09  } { incr i } {..
9bc0: 69 66 20 7b 20 21 5b 41 72 65 46 69 6c 65 73 45  if { ![AreFilesE
9bd0: 71 75 61 6c 20 5b 6c 69 6e 64 65 78 20 24 6c 69  qual [lindex $li
9be0: 73 74 31 20 24 69 5d 20 5b 6c 69 6e 64 65 78 20  st1 $i] [lindex 
9bf0: 24 6c 69 73 74 32 20 24 69 5d 5d 20 7d 20 7b 0a  $list2 $i]] } {.
9c00: 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 20 20  .    break..}.  
9c10: 20 20 7d 0a 20 20 20 20 73 65 74 20 6c 69 73 74    }.    set list
9c20: 72 65 73 20 22 22 0a 20 20 20 20 66 6f 72 20 7b  res "".    for {
9c30: 20 73 65 74 20 6a 20 24 69 20 7d 20 7b 20 24 6a   set j $i } { $j
9c40: 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 73   < [llength $lis
9c50: 74 31 5d 20 7d 20 7b 20 69 6e 63 72 20 6a 20 7d  t1] } { incr j }
9c60: 20 7b 0a 09 6c 61 70 70 65 6e 64 20 6c 69 73 74   {..lappend list
9c70: 72 65 73 20 2e 2e 0a 20 20 20 20 7d 0a 20 20 20  res ...    }.   
9c80: 20 66 6f 72 20 7b 20 73 65 74 20 6a 20 24 69 20   for { set j $i 
9c90: 7d 20 7b 20 24 6a 20 3c 20 5b 6c 6c 65 6e 67 74  } { $j < [llengt
9ca0: 68 20 24 6c 69 73 74 32 5d 20 7d 20 7b 20 69 6e  h $list2] } { in
9cb0: 63 72 20 6a 20 7d 20 7b 0a 09 6c 61 70 70 65 6e  cr j } {..lappen
9cc0: 64 20 6c 69 73 74 72 65 73 20 5b 6c 69 6e 64 65  d listres [linde
9cd0: 78 20 24 6c 69 73 74 32 20 24 6a 5d 0a 20 20 20  x $list2 $j].   
9ce0: 20 7d 0a 20 20 20 20 69 66 20 7b 20 24 6c 69 73   }.    if { $lis
9cf0: 74 72 65 73 20 3d 3d 20 22 22 20 7d 20 7b 20 72  tres == "" } { r
9d00: 65 74 75 72 6e 20 2e 20 7d 0a 20 20 20 20 72 65  eturn . }.    re
9d10: 74 75 72 6e 20 5b 65 76 61 6c 20 66 69 6c 65 20  turn [eval file 
9d20: 6a 6f 69 6e 20 24 6c 69 73 74 72 65 73 5d 0a 7d  join $listres].}
9d30: 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a  ..proc cproject:
9d40: 3a 49 73 50 72 6f 6a 65 63 74 4e 61 6d 65 4f 6b  :IsProjectNameOk
9d50: 20 7b 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62   {} {.    variab
9d60: 6c 65 20 70 72 6f 6a 65 63 74 0a 20 20 20 20 76  le project.    v
9d70: 61 72 69 61 62 6c 65 20 6e 6f 74 65 62 6f 6f 6b  ariable notebook
9d80: 0a 0a 20 20 20 20 69 66 20 7b 20 5b 69 6e 66 6f  ..    if { [info
9d90: 20 65 78 69 73 74 73 20 6e 6f 74 65 62 6f 6f 6b   exists notebook
9da0: 5d 20 26 26 20 5b 77 69 6e 66 6f 20 65 78 69 73  ] && [winfo exis
9db0: 74 73 20 6e 6f 74 65 62 6f 6f 6b 5d 20 7d 20 7b  ts notebook] } {
9dc0: 0a 09 73 65 74 20 77 20 5b 77 69 6e 66 6f 20 74  ..set w [winfo t
9dd0: 6f 70 6c 65 76 65 6c 20 24 6e 6f 74 65 62 6f 6f  oplevel $noteboo
9de0: 6b 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 20  k].    } else { 
9df0: 73 65 74 20 77 20 2e 20 7d 0a 0a 20 20 20 20 69  set w . }..    i
9e00: 66 20 7b 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  f { [string trim
9e10: 20 24 70 72 6f 6a 65 63 74 5d 20 3d 3d 20 22 22   $project] == ""
9e20: 20 7d 20 7b 0a 09 57 61 72 6e 57 69 6e 20 22 44   } {..WarnWin "D
9e30: 65 66 69 6e 65 20 61 20 70 72 6f 6a 65 63 74 20  efine a project 
9e40: 6e 61 6d 65 20 62 65 66 6f 72 65 20 65 6e 74 65  name before ente
9e50: 72 69 6e 67 20 64 61 74 61 22 20 24 77 0a 09 72  ring data" $w..r
9e60: 65 74 75 72 6e 20 2d 63 6f 64 65 20 72 65 74 75  eturn -code retu
9e70: 72 6e 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  rn.    }.    if 
9e80: 7b 20 5b 66 69 6c 65 20 70 61 74 68 74 79 70 65  { [file pathtype
9e90: 20 24 70 72 6f 6a 65 63 74 5d 20 21 3d 20 22 61   $project] != "a
9ea0: 62 73 6f 6c 75 74 65 22 20 7d 20 7b 0a 09 73 65  bsolute" } {..se
9eb0: 74 20 70 72 6f 6a 65 63 74 20 5b 66 69 6c 65 20  t project [file 
9ec0: 6a 6f 69 6e 20 5b 70 77 64 5d 20 24 70 72 6f 6a  join [pwd] $proj
9ed0: 65 63 74 5d 0a 09 69 66 20 7b 20 21 5b 66 69 6c  ect]..if { ![fil
9ee0: 65 20 69 73 64 69 72 20 5b 66 69 6c 65 20 64 69  e isdir [file di
9ef0: 72 6e 61 6d 65 20 24 70 72 6f 6a 65 63 74 5d 5d  rname $project]]
9f00: 20 7d 20 7b 0a 09 20 20 20 20 57 61 72 6e 57 69   } {..    WarnWi
9f10: 6e 20 22 50 72 6f 6a 65 63 74 20 70 61 74 68 6e  n "Project pathn
9f20: 61 6d 65 20 69 73 20 6e 6f 74 20 63 6f 72 72 65  ame is not corre
9f30: 63 74 22 20 24 77 0a 09 20 20 20 20 72 65 74 75  ct" $w..    retu
9f40: 72 6e 20 2d 63 6f 64 65 20 72 65 74 75 72 6e 0a  rn -code return.
9f50: 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  .}.    }.    ret
9f60: 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  urn [file dirnam
9f70: 65 20 24 70 72 6f 6a 65 63 74 5d 0a 7d 0a 0a 70  e $project].}..p
9f80: 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 41 64  roc cproject::Ad
9f90: 64 4d 6f 64 46 69 6c 65 73 20 7b 20 6c 69 73 74  dModFiles { list
9fa0: 62 6f 78 20 77 68 61 74 20 7d 20 7b 0a 20 20 20  box what } {.   
9fb0: 20 76 61 72 69 61 62 6c 65 20 70 72 6f 6a 65 63   variable projec
9fc0: 74 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 66  t.    variable f
9fd0: 69 6c 65 73 0a 20 20 20 20 76 61 72 69 61 62 6c  iles.    variabl
9fe0: 65 20 67 72 6f 75 70 0a 0a 20 20 20 20 73 65 74  e group..    set
9ff0: 20 70 72 6f 6a 65 63 74 64 69 72 20 5b 49 73 50   projectdir [IsP
a000: 72 6f 6a 65 63 74 4e 61 6d 65 4f 6b 5d 0a 0a 20  rojectNameOk].. 
a010: 20 20 20 73 77 69 74 63 68 20 24 77 68 61 74 20     switch $what 
a020: 7b 0a 09 22 76 69 65 77 22 20 7b 0a 09 20 20 20  {.."view" {..   
a030: 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 5b   if { [llength [
a040: 24 6c 69 73 74 62 6f 78 20 63 75 72 73 65 6c 65  $listbox cursele
a050: 63 74 69 6f 6e 5d 5d 20 21 3d 20 31 20 7d 20 7b  ction]] != 1 } {
a060: 0a 09 09 57 61 72 6e 57 69 6e 20 22 45 72 72 6f  ...WarnWin "Erro
a070: 72 3a 20 53 65 6c 65 63 74 20 6a 75 73 74 20 6f  r: Select just o
a080: 6e 65 20 66 69 6c 65 20 74 6f 20 73 65 65 20 69  ne file to see i
a090: 74 22 20 24 6c 69 73 74 62 6f 78 0a 09 09 72 65  t" $listbox...re
a0a0: 74 75 72 6e 0a 09 20 20 20 20 7d 0a 09 20 20 20  turn..    }..   
a0b0: 20 66 6f 72 65 61 63 68 20 22 66 69 6c 65 5f 69   foreach "file_i
a0c0: 6e 20 74 79 70 65 20 67 72 6f 75 70 5f 69 6e 20  n type group_in 
a0d0: 70 61 74 68 22 20 5b 6c 69 6e 64 65 78 20 24 66  path" [lindex $f
a0e0: 69 6c 65 73 20 5b 24 6c 69 73 74 62 6f 78 20 63  iles [$listbox c
a0f0: 75 72 73 65 6c 65 63 74 69 6f 6e 5d 5d 20 62 72  urselection]] br
a100: 65 61 6b 0a 09 20 20 20 20 73 65 74 20 66 69 6c  eak..    set fil
a110: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69  e [file join [fi
a120: 6c 65 20 64 69 72 6e 61 6d 65 20 24 70 72 6f 6a  le dirname $proj
a130: 65 63 74 5d 20 24 70 61 74 68 20 24 66 69 6c 65  ect] $path $file
a140: 5f 69 6e 5d 0a 09 20 20 20 20 52 61 6d 44 65 62  _in]..    RamDeb
a150: 75 67 67 65 72 3a 3a 4f 70 65 6e 46 69 6c 65 46  ugger::OpenFileF
a160: 20 5b 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 66   [RamDebugger::f
a170: 69 6c 65 6e 6f 72 6d 61 6c 69 7a 65 20 24 66 69  ilenormalize $fi
a180: 6c 65 5d 0a 09 7d 0a 09 22 66 69 6c 65 22 20 7b  le]..}.."file" {
a190: 0a 09 20 20 20 20 73 65 74 20 74 79 70 65 73 20  ..    set types 
a1a0: 7b 0a 09 09 7b 7b 43 20 53 6f 75 72 63 65 20 46  {...{{C Source F
a1b0: 69 6c 65 73 7d 20 7b 2e 63 20 2e 63 63 20 2e 68  iles} {.c .cc .h
a1c0: 7d 20 7d 0a 09 09 7b 7b 41 6c 6c 20 46 69 6c 65  } }...{{All File
a1d0: 73 7d 20 2a 20 7d 0a 09 20 20 20 20 7d 0a 09 20  s} * }..    }.. 
a1e0: 20 20 20 73 65 74 20 66 69 6c 65 20 5b 74 6b 5f     set file [tk_
a1f0: 67 65 74 4f 70 65 6e 46 69 6c 65 20 2d 66 69 6c  getOpenFile -fil
a200: 65 74 79 70 65 73 20 24 74 79 70 65 73 20 2d 69  etypes $types -i
a210: 6e 69 74 69 61 6c 64 69 72 20 24 70 72 6f 6a 65  nitialdir $proje
a220: 63 74 64 69 72 20 2d 70 61 72 65 6e 74 20 24 6c  ctdir -parent $l
a230: 69 73 74 62 6f 78 20 5c 0a 09 09 2d 74 69 74 6c  istbox \...-titl
a240: 65 20 22 49 6e 73 65 72 74 20 66 69 6c 65 20 69  e "Insert file i
a250: 6e 74 6f 20 70 72 6f 6a 65 63 74 22 5d 0a 09 20  nto project"].. 
a260: 20 20 20 69 66 20 7b 20 24 66 69 6c 65 20 3d 3d     if { $file ==
a270: 20 22 22 20 7d 20 7b 20 72 65 74 75 72 6e 20 7d   "" } { return }
a280: 0a 09 20 20 20 20 73 65 74 20 66 69 6c 65 20 5b  ..    set file [
a290: 43 6f 6e 76 65 72 74 54 6f 52 65 6c 61 74 69 76  ConvertToRelativ
a2a0: 65 20 24 70 72 6f 6a 65 63 74 64 69 72 20 24 66  e $projectdir $f
a2b0: 69 6c 65 5d 0a 0a 09 20 20 20 20 66 6f 72 65 61  ile]...    forea
a2c0: 63 68 20 69 20 24 66 69 6c 65 73 20 7b 0a 09 09  ch i $files {...
a2d0: 66 6f 72 65 61 63 68 20 22 66 69 6c 65 5f 69 6e  foreach "file_in
a2e0: 20 74 79 70 65 20 67 72 6f 75 70 5f 69 6e 20 70   type group_in p
a2f0: 61 74 68 22 20 24 69 20 62 72 65 61 6b 0a 09 09  ath" $i break...
a300: 69 66 20 7b 20 5b 41 72 65 46 69 6c 65 73 45 71  if { [AreFilesEq
a310: 75 61 6c 20 24 66 69 6c 65 20 24 66 69 6c 65 5f  ual $file $file_
a320: 69 6e 5d 20 7d 20 7b 0a 09 09 20 20 20 20 57 61  in] } {...    Wa
a330: 72 6e 57 69 6e 20 22 45 72 72 6f 72 3a 20 66 69  rnWin "Error: fi
a340: 6c 65 20 27 24 66 69 6c 65 27 20 69 73 20 61 6c  le '$file' is al
a350: 72 65 61 64 79 20 69 6e 20 74 68 65 20 70 72 6f  ready in the pro
a360: 6a 65 63 74 22 20 24 6c 69 73 74 62 6f 78 0a 09  ject" $listbox..
a370: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 09 7d 0a  .    return...}.
a380: 09 20 20 20 20 7d 0a 09 20 20 20 20 6c 61 70 70  .    }..    lapp
a390: 65 6e 64 20 66 69 6c 65 73 20 5b 6c 69 73 74 20  end files [list 
a3a0: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65  [file tail $file
a3b0: 5d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 6c 65  ] [string trimle
a3c0: 66 74 20 5b 66 69 6c 65 20 65 78 74 20 24 66 69  ft [file ext $fi
a3d0: 6c 65 5d 20 2e 5d 20 24 67 72 6f 75 70 20 5c 0a  le] .] $group \.
a3e0: 09 09 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  ..[file dirname 
a3f0: 24 66 69 6c 65 5d 5d 0a 09 7d 0a 09 22 64 69 72  $file]]..}.."dir
a400: 22 20 7b 0a 09 20 20 20 20 73 65 74 20 64 69 72  " {..    set dir
a410: 20 5b 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 66   [RamDebugger::f
a420: 69 6c 65 6e 6f 72 6d 61 6c 69 7a 65 20 5b 74 6b  ilenormalize [tk
a430: 5f 63 68 6f 6f 73 65 44 69 72 65 63 74 6f 72 79  _chooseDirectory
a440: 20 2d 69 6e 69 74 69 61 6c 64 69 72 20 24 70 72   -initialdir $pr
a450: 6f 6a 65 63 74 64 69 72 20 5c 0a 09 09 2d 70 61  ojectdir \...-pa
a460: 72 65 6e 74 20 24 6c 69 73 74 62 6f 78 20 5c 0a  rent $listbox \.
a470: 09 09 2d 74 69 74 6c 65 20 22 49 6e 73 65 72 74  ..-title "Insert
a480: 20 66 69 6c 65 73 20 66 72 6f 6d 20 64 69 72 65   files from dire
a490: 63 74 6f 72 79 20 69 6e 74 6f 20 70 72 6f 6a 65  ctory into proje
a4a0: 63 74 22 20 2d 6d 75 73 74 65 78 69 73 74 20 31  ct" -mustexist 1
a4b0: 5d 5d 0a 09 20 20 20 20 69 66 20 7b 20 24 64 69  ]]..    if { $di
a4c0: 72 20 3d 3d 20 22 22 20 7d 20 7b 20 72 65 74 75  r == "" } { retu
a4d0: 72 6e 20 7d 0a 09 20 20 20 20 0a 09 20 20 20 20  rn }..    ..    
a4e0: 73 65 74 20 66 69 6c 65 73 6c 69 73 74 20 22 22  set fileslist ""
a4f0: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  ..    foreach i 
a500: 24 66 69 6c 65 73 20 7b 0a 09 09 66 6f 72 65 61  $files {...forea
a510: 63 68 20 22 66 69 6c 65 5f 69 6e 20 74 79 70 65  ch "file_in type
a520: 20 67 72 6f 75 70 5f 69 6e 20 70 61 74 68 22 20   group_in path" 
a530: 24 69 20 62 72 65 61 6b 0a 09 09 6c 61 70 70 65  $i break...lappe
a540: 6e 64 20 66 69 6c 65 73 6c 69 73 74 20 24 66 69  nd fileslist $fi
a550: 6c 65 5f 69 6e 0a 09 20 20 20 20 7d 0a 09 20 20  le_in..    }..  
a560: 20 20 73 65 74 20 6e 75 6d 20 30 0a 09 20 20 20    set num 0..   
a570: 20 66 6f 72 65 61 63 68 20 69 20 5b 67 6c 6f 62   foreach i [glob
a580: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 64 69   -nocomplain -di
a590: 72 20 24 64 69 72 20 2a 2e 63 20 2a 2e 63 63 5d  r $dir *.c *.cc]
a5a0: 20 7b 0a 09 09 73 65 74 20 66 69 6c 65 20 5b 43   {...set file [C
a5b0: 6f 6e 76 65 72 74 54 6f 52 65 6c 61 74 69 76 65  onvertToRelative
a5c0: 20 24 70 72 6f 6a 65 63 74 64 69 72 20 24 69 5d   $projectdir $i]
a5d0: 0a 09 09 69 66 20 7b 20 5b 52 61 6d 44 65 62 75  ...if { [RamDebu
a5e0: 67 67 65 72 3a 3a 6c 73 65 61 72 63 68 66 69 6c  gger::lsearchfil
a5f0: 65 20 24 66 69 6c 65 73 6c 69 73 74 20 24 66 69  e $fileslist $fi
a600: 6c 65 5d 20 21 3d 20 2d 31 20 7d 20 7b 20 63 6f  le] != -1 } { co
a610: 6e 74 69 6e 75 65 20 7d 0a 09 09 6c 61 70 70 65  ntinue }...lappe
a620: 6e 64 20 66 69 6c 65 73 20 5b 6c 69 73 74 20 5b  nd files [list [
a630: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 5d  file tail $file]
a640: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 6c 65 66   [string trimlef
a650: 74 20 5b 66 69 6c 65 20 65 78 74 20 24 66 69 6c  t [file ext $fil
a660: 65 5d 20 2e 5d 20 24 67 72 6f 75 70 20 5c 0a 09  e] .] $group \..
a670: 09 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e  .     [file dirn
a680: 61 6d 65 20 24 66 69 6c 65 5d 5d 0a 09 09 69 6e  ame $file]]...in
a690: 63 72 20 6e 75 6d 0a 09 20 20 20 20 7d 0a 09 20  cr num..    }.. 
a6a0: 20 20 20 57 61 72 6e 57 69 6e 20 22 49 6e 73 65     WarnWin "Inse
a6b0: 72 74 65 64 20 24 6e 75 6d 20 6e 65 77 20 66 69  rted $num new fi
a6c0: 6c 65 73 22 20 24 6c 69 73 74 62 6f 78 0a 09 7d  les" $listbox..}
a6d0: 0a 09 65 64 69 74 20 7b 0a 09 20 20 20 20 73 65  ..edit {..    se
a6e0: 74 20 6e 75 6d 20 30 0a 09 20 20 20 20 73 65 74  t num 0..    set
a6f0: 20 6e 75 6d 64 69 66 66 20 30 0a 09 20 20 20 20   numdiff 0..    
a700: 66 6f 72 65 61 63 68 20 69 20 5b 24 6c 69 73 74  foreach i [$list
a710: 62 6f 78 20 63 75 72 73 65 6c 65 63 74 69 6f 6e  box curselection
a720: 5d 20 7b 0a 09 09 66 6f 72 65 61 63 68 20 22 66  ] {...foreach "f
a730: 69 6c 65 5f 69 6e 20 74 79 70 65 20 67 72 6f 75  ile_in type grou
a740: 70 5f 69 6e 20 70 61 74 68 22 20 5b 6c 69 6e 64  p_in path" [lind
a750: 65 78 20 24 66 69 6c 65 73 20 24 69 5d 20 62 72  ex $files $i] br
a760: 65 61 6b 0a 09 09 69 66 20 7b 20 24 67 72 6f 75  eak...if { $grou
a770: 70 20 21 3d 20 24 67 72 6f 75 70 5f 69 6e 20 7d  p != $group_in }
a780: 20 7b 20 69 6e 63 72 20 6e 75 6d 64 69 66 66 20   { incr numdiff 
a790: 7d 0a 09 09 73 65 74 20 66 69 6c 65 73 20 5b 6c  }...set files [l
a7a0: 72 65 70 6c 61 63 65 20 24 66 69 6c 65 73 20 24  replace $files $
a7b0: 69 20 24 69 20 5b 6c 69 73 74 20 24 66 69 6c 65  i $i [list $file
a7c0: 5f 69 6e 20 24 74 79 70 65 20 24 67 72 6f 75 70  _in $type $group
a7d0: 20 24 70 61 74 68 5d 5d 0a 09 09 69 6e 63 72 20   $path]]...incr 
a7e0: 6e 75 6d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  num..    }..    
a7f0: 57 61 72 6e 57 69 6e 20 22 52 65 70 6c 61 63 65  WarnWin "Replace
a800: 64 20 67 72 6f 75 70 20 74 6f 20 24 6e 75 6d 20  d group to $num 
a810: 66 69 6c 65 73 20 28 24 6e 75 6d 64 69 66 66 20  files ($numdiff 
a820: 6e 65 77 29 22 0a 09 7d 0a 09 64 65 6c 65 74 65  new)"..}..delete
a830: 20 7b 0a 09 20 20 20 20 73 65 74 20 6e 75 6d 20   {..    set num 
a840: 30 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 69  0..    foreach i
a850: 20 5b 24 6c 69 73 74 62 6f 78 20 63 75 72 73 65   [$listbox curse
a860: 6c 65 63 74 69 6f 6e 5d 20 7b 0a 09 09 73 65 74  lection] {...set
a870: 20 69 70 6f 73 20 5b 65 78 70 72 20 24 69 2d 24   ipos [expr $i-$
a880: 6e 75 6d 5d 0a 09 09 73 65 74 20 66 69 6c 65 73  num]...set files
a890: 20 5b 6c 72 65 70 6c 61 63 65 20 24 66 69 6c 65   [lreplace $file
a8a0: 73 20 24 69 70 6f 73 20 24 69 70 6f 73 5d 0a 09  s $ipos $ipos]..
a8b0: 09 69 6e 63 72 20 6e 75 6d 0a 09 20 20 20 20 7d  .incr num..    }
a8c0: 0a 09 20 20 20 20 24 6c 69 73 74 62 6f 78 20 73  ..    $listbox s
a8d0: 65 6c 65 63 74 69 6f 6e 20 63 6c 65 61 72 20 30  election clear 0
a8e0: 20 65 6e 64 0a 09 20 20 20 20 57 61 72 6e 57 69   end..    WarnWi
a8f0: 6e 20 22 44 65 6c 65 74 65 64 20 66 72 6f 6d 20  n "Deleted from 
a900: 70 72 6f 6a 65 63 74 20 24 6e 75 6d 20 66 69 6c  project $num fil
a910: 65 73 22 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a  es"..}.    }.}..
a920: 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 41  proc cproject::A
a930: 64 64 44 65 6c 44 69 72 65 63 74 6f 72 69 65 73  ddDelDirectories
a940: 20 7b 20 6c 69 73 74 62 6f 78 20 77 68 61 74 20   { listbox what 
a950: 7d 20 7b 0a 0a 20 20 20 20 73 65 74 20 70 72 6f  } {..    set pro
a960: 6a 65 63 74 64 69 72 20 5b 49 73 50 72 6f 6a 65  jectdir [IsProje
a970: 63 74 4e 61 6d 65 4f 6b 5d 0a 0a 20 20 20 20 73  ctNameOk]..    s
a980: 65 74 20 64 69 72 20 5b 49 73 50 72 6f 6a 65 63  et dir [IsProjec
a990: 74 4e 61 6d 65 4f 6b 5d 0a 20 20 20 20 73 77 69  tNameOk].    swi
a9a0: 74 63 68 20 24 77 68 61 74 20 7b 0a 09 61 64 64  tch $what {..add
a9b0: 20 7b 0a 09 20 20 20 20 73 65 74 20 64 69 72 20   {..    set dir 
a9c0: 5b 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 66 69  [RamDebugger::fi
a9d0: 6c 65 6e 6f 72 6d 61 6c 69 7a 65 20 5b 74 6b 5f  lenormalize [tk_
a9e0: 63 68 6f 6f 73 65 44 69 72 65 63 74 6f 72 79 20  chooseDirectory 
a9f0: 2d 69 6e 69 74 69 61 6c 64 69 72 20 24 64 69 72  -initialdir $dir
aa00: 20 5c 0a 09 09 20 20 20 20 2d 70 61 72 65 6e 74   \...    -parent
aa10: 20 24 6c 69 73 74 62 6f 78 20 2d 74 69 74 6c 65   $listbox -title
aa20: 20 22 41 64 64 20 64 69 72 65 63 74 6f 72 69 65   "Add directorie
aa30: 73 22 20 2d 6d 75 73 74 65 78 69 73 74 20 31 5d  s" -mustexist 1]
aa40: 5d 0a 09 20 20 20 20 69 66 20 7b 20 24 64 69 72  ]..    if { $dir
aa50: 20 3d 3d 20 22 22 20 7d 20 7b 20 72 65 74 75 72   == "" } { retur
aa60: 6e 20 7d 0a 09 20 20 20 20 24 6c 69 73 74 62 6f  n }..    $listbo
aa70: 78 20 69 6e 73 65 72 74 20 65 6e 64 20 5b 43 6f  x insert end [Co
aa80: 6e 76 65 72 74 54 6f 52 65 6c 61 74 69 76 65 20  nvertToRelative 
aa90: 24 70 72 6f 6a 65 63 74 64 69 72 20 24 64 69 72  $projectdir $dir
aaa0: 5d 0a 09 7d 0a 09 64 65 6c 65 74 65 20 7b 0a 09  ]..}..delete {..
aab0: 20 20 20 20 73 65 74 20 6e 75 6d 20 30 0a 09 20      set num 0.. 
aac0: 20 20 20 66 6f 72 65 61 63 68 20 69 20 5b 24 6c     foreach i [$l
aad0: 69 73 74 62 6f 78 20 63 75 72 73 65 6c 65 63 74  istbox curselect
aae0: 69 6f 6e 5d 20 7b 0a 09 09 73 65 74 20 69 70 6f  ion] {...set ipo
aaf0: 73 20 5b 65 78 70 72 20 24 69 2d 24 6e 75 6d 5d  s [expr $i-$num]
ab00: 0a 09 09 24 6c 69 73 74 62 6f 78 20 64 65 6c 65  ...$listbox dele
ab10: 74 65 20 24 69 70 6f 73 0a 09 09 69 6e 63 72 20  te $ipos...incr 
ab20: 6e 75 6d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  num..    }..    
ab30: 24 6c 69 73 74 62 6f 78 20 73 65 6c 65 63 74 69  $listbox selecti
ab40: 6f 6e 20 63 6c 65 61 72 20 30 20 65 6e 64 0a 09  on clear 0 end..
ab50: 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 0a 23 23 23 23  }.    }.}...####
ab60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aba0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 20  ############.#  
abb0: 20 65 78 65 63 75 74 69 6f 6e 0a 23 23 23 23 23   execution.#####
abc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac00: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 0a 70 72  ###########...pr
ac10: 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 47 69 76  oc cproject::Giv
ac20: 65 44 65 62 75 67 44 61 74 61 20 7b 7d 20 7b 0a  eDebugData {} {.
ac30: 20 20 20 20 76 61 72 69 61 62 6c 65 20 70 72 6f      variable pro
ac40: 6a 65 63 74 0a 20 20 20 20 76 61 72 69 61 62 6c  ject.    variabl
ac50: 65 20 64 61 74 61 45 0a 0a 20 20 20 20 73 65 74  e dataE..    set
ac60: 20 64 72 20 24 52 61 6d 44 65 62 75 67 67 65 72   dr $RamDebugger
ac70: 3a 3a 6f 70 74 69 6f 6e 73 28 64 65 62 75 67 72  ::options(debugr
ac80: 65 6c 65 61 73 65 29 0a 0a 20 20 20 20 69 66 20  elease)..    if 
ac90: 7b 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64  { [info exists d
aca0: 61 74 61 45 28 24 64 72 2c 65 78 65 29 5d 20 7d  ataE($dr,exe)] }
acb0: 20 7b 0a 09 73 65 74 20 6f 62 6a 64 69 72 20 5b   {..set objdir [
acc0: 66 69 6c 65 20 72 6f 6f 74 20 24 70 72 6f 6a 65  file root $proje
acd0: 63 74 5d 5f 24 64 72 0a 09 73 65 74 20 65 78 65  ct]_$dr..set exe
ace0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6f 62 6a   [file join $obj
acf0: 64 69 72 20 24 64 61 74 61 45 28 24 64 72 2c 65  dir $dataE($dr,e
ad00: 78 65 29 5d 0a 09 72 65 74 75 72 6e 20 5b 6c 69  xe)]..return [li
ad10: 73 74 20 24 65 78 65 20 24 64 61 74 61 45 28 24  st $exe $dataE($
ad20: 64 72 2c 65 78 65 63 64 69 72 29 20 5c 0a 09 09  dr,execdir) \...
ad30: 24 64 61 74 61 45 28 24 64 72 2c 65 78 65 61 72  $dataE($dr,exear
ad40: 67 73 29 5d 0a 20 20 20 20 7d 0a 20 20 20 20 72  gs)].    }.    r
ad50: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 0a 70 72 6f  eturn "".}...pro
ad60: 63 20 63 70 72 6f 6a 65 63 74 3a 3a 54 72 79 54  c cproject::TryT
ad70: 6f 46 69 6e 64 50 61 74 68 20 7b 20 66 69 6c 65  oFindPath { file
ad80: 20 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c   } {.    variabl
ad90: 65 20 70 72 6f 6a 65 63 74 0a 20 20 20 20 76 61  e project.    va
ada0: 72 69 61 62 6c 65 20 66 69 6c 65 73 0a 0a 20 20  riable files..  
adb0: 20 20 73 65 74 20 6c 61 73 74 5f 70 61 74 68 20    set last_path 
adc0: 22 22 0a 0a 20 20 20 20 73 65 74 20 62 61 73 65  ""..    set base
add0: 5f 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  _dir [file dirna
ade0: 6d 65 20 24 70 72 6f 6a 65 63 74 5d 0a 0a 20 20  me $project]..  
adf0: 20 20 69 66 20 7b 20 5b 66 69 6c 65 20 65 78 69    if { [file exi
ae00: 73 74 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  sts [file join $
ae10: 62 61 73 65 5f 64 69 72 20 24 66 69 6c 65 5d 5d  base_dir $file]]
ae20: 20 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 66 69   } {..return [fi
ae30: 6c 65 20 6a 6f 69 6e 20 24 62 61 73 65 5f 64 69  le join $base_di
ae40: 72 20 24 66 69 6c 65 5d 0a 20 20 20 20 7d 0a 0a  r $file].    }..
ae50: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 66      foreach i $f
ae60: 69 6c 65 73 20 7b 0a 09 66 6f 72 65 61 63 68 20  iles {..foreach 
ae70: 22 66 69 6c 65 5f 69 6e 20 74 79 70 65 20 67 72  "file_in type gr
ae80: 6f 75 70 5f 69 6e 20 70 61 74 68 22 20 24 69 20  oup_in path" $i 
ae90: 62 72 65 61 6b 0a 09 69 66 20 7b 20 24 70 61 74  break..if { $pat
aea0: 68 20 3d 3d 20 24 6c 61 73 74 5f 70 61 74 68 20  h == $last_path 
aeb0: 7d 20 7b 20 63 6f 6e 74 69 6e 75 65 20 7d 0a 0a  } { continue }..
aec0: 09 69 66 20 7b 20 5b 66 69 6c 65 20 65 78 69 73  .if { [file exis
aed0: 74 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 62  ts [file join $b
aee0: 61 73 65 5f 64 69 72 20 24 70 61 74 68 20 24 66  ase_dir $path $f
aef0: 69 6c 65 5d 5d 20 7d 20 7b 0a 09 20 20 20 20 72  ile]] } {..    r
af00: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  eturn [file join
af10: 20 24 62 61 73 65 5f 64 69 72 20 24 70 61 74 68   $base_dir $path
af20: 20 24 66 69 6c 65 5d 0a 09 7d 0a 09 73 65 74 20   $file]..}..set 
af30: 6c 61 73 74 5f 70 61 74 68 20 24 70 61 74 68 0a  last_path $path.
af40: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
af50: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 70 72 6f   "".}..proc cpro
af60: 6a 65 63 74 3a 3a 53 63 61 6e 48 65 61 64 65 72  ject::ScanHeader
af70: 73 20 7b 20 66 69 6c 65 20 7d 20 7b 0a 0a 20 20  s { file } {..  
af80: 20 20 73 65 74 20 66 69 6e 20 5b 6f 70 65 6e 20    set fin [open 
af90: 24 66 69 6c 65 20 72 5d 0a 20 20 20 20 73 65 74  $file r].    set
afa0: 20 61 61 20 5b 72 65 61 64 20 24 66 69 6e 5d 0a   aa [read $fin].
afb0: 20 20 20 20 63 6c 6f 73 65 20 24 66 69 6e 0a 0a      close $fin..
afc0: 20 20 20 20 73 65 74 20 68 65 61 64 65 72 73 20      set headers 
afd0: 22 22 0a 20 20 20 20 66 6f 72 65 61 63 68 20 22  "".    foreach "
afe0: 2d 20 68 65 61 64 65 72 22 20 5b 72 65 67 65 78  - header" [regex
aff0: 70 20 2d 69 6e 6c 69 6e 65 20 2d 61 6c 6c 20 7b  p -inline -all {
b000: 5c 23 69 6e 63 6c 75 64 65 5c 73 2b 5c 22 28 5b  \#include\s+\"([
b010: 5e 5c 22 5d 2b 29 5c 22 7d 20 24 61 61 5d 20 7b  ^\"]+)\"} $aa] {
b020: 0a 09 73 65 74 20 66 69 6c 65 20 5b 66 69 6c 65  ..set file [file
b030: 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e   join [file dirn
b040: 61 6d 65 20 24 66 69 6c 65 5d 20 24 68 65 61 64  ame $file] $head
b050: 65 72 5d 0a 09 69 66 20 7b 20 5b 66 69 6c 65 20  er]..if { [file 
b060: 65 78 69 73 74 20 24 66 69 6c 65 5d 20 7d 20 7b  exist $file] } {
b070: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 68 65  ..    lappend he
b080: 61 64 65 72 73 20 5b 66 69 6c 65 20 6a 6f 69 6e  aders [file join
b090: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
b0a0: 66 69 6c 65 5d 20 24 68 65 61 64 65 72 5d 0a 09  file] $header]..
b0b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  }.    }.    retu
b0c0: 72 6e 20 24 68 65 61 64 65 72 73 0a 7d 0a 0a 70  rn $headers.}..p
b0d0: 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 43 6c  roc cproject::Cl
b0e0: 65 61 6e 43 6f 6d 70 69 6c 65 64 46 69 6c 65 73  eanCompiledFiles
b0f0: 20 7b 20 77 20 7d 20 7b 0a 20 20 20 20 76 61 72   { w } {.    var
b100: 69 61 62 6c 65 20 70 72 6f 6a 65 63 74 0a 20 20  iable project.  
b110: 20 20 76 61 72 69 61 62 6c 65 20 66 69 6c 65 73    variable files
b120: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61  .    variable da
b130: 74 61 43 0a 20 20 20 20 76 61 72 69 61 62 6c 65  taC.    variable
b140: 20 64 61 74 61 4c 0a 20 20 20 20 76 61 72 69 61   dataL.    varia
b150: 62 6c 65 20 64 61 74 61 45 0a 0a 20 20 20 20 52  ble dataE..    R
b160: 61 6d 44 65 62 75 67 67 65 72 3a 3a 53 65 74 4d  amDebugger::SetM
b170: 65 73 73 61 67 65 20 22 43 6c 65 61 6e 69 6e 67  essage "Cleaning
b180: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 66 69 6c   compilation fil
b190: 65 73 2e 2e 2e 22 0a 20 20 20 20 52 61 6d 44 65  es...".    RamDe
b1a0: 62 75 67 67 65 72 3a 3a 57 61 69 74 53 74 61 74  bugger::WaitStat
b1b0: 65 20 31 0a 0a 20 20 20 20 69 66 20 7b 20 24 70  e 1..    if { $p
b1c0: 72 6f 6a 65 63 74 20 3d 3d 20 22 22 20 7d 20 7b  roject == "" } {
b1d0: 0a 09 69 66 20 7b 20 5b 69 6e 66 6f 20 65 78 69  ..if { [info exi
b1e0: 73 74 73 20 52 61 6d 44 65 62 75 67 67 65 72 3a  sts RamDebugger:
b1f0: 3a 6f 70 74 69 6f 6e 73 28 72 65 63 65 6e 74 70  :options(recentp
b200: 72 6f 6a 65 63 74 73 29 5d 20 26 26 20 5c 0a 09  rojects)] && \..
b210: 09 5b 6c 6c 65 6e 67 74 68 20 24 52 61 6d 44 65  .[llength $RamDe
b220: 62 75 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28  bugger::options(
b230: 72 65 63 65 6e 74 70 72 6f 6a 65 63 74 73 29 5d  recentprojects)]
b240: 20 3e 20 30 20 7d 20 7b 0a 09 20 20 20 20 73 65   > 0 } {..    se
b250: 74 20 70 72 6f 6a 65 63 74 20 5b 6c 69 6e 64 65  t project [linde
b260: 78 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a 3a  x $RamDebugger::
b270: 6f 70 74 69 6f 6e 73 28 72 65 63 65 6e 74 70 72  options(recentpr
b280: 6f 6a 65 63 74 73 29 20 30 5d 0a 09 20 20 20 20  ojects) 0]..    
b290: 73 65 74 20 65 72 72 20 5b 63 61 74 63 68 20 7b  set err [catch {
b2a0: 20 63 70 72 6f 6a 65 63 74 3a 3a 4f 70 65 6e 50   cproject::OpenP
b2b0: 72 6f 6a 65 63 74 20 24 77 20 30 20 7d 5d 0a 09  roject $w 0 }]..
b2c0: 20 20 20 20 69 66 20 7b 20 24 65 72 72 20 7d 20      if { $err } 
b2d0: 7b 20 73 65 74 20 70 72 6f 6a 65 63 74 20 22 22  { set project ""
b2e0: 20 7d 0a 09 7d 0a 09 69 66 20 7b 20 24 70 72 6f   }..}..if { $pro
b2f0: 6a 65 63 74 20 3d 3d 20 22 22 20 7d 20 7b 0a 09  ject == "" } {..
b300: 20 20 20 20 63 70 72 6f 6a 65 63 74 3a 3a 43 72      cproject::Cr
b310: 65 61 74 65 20 24 77 0a 09 20 20 20 20 72 65 74  eate $w..    ret
b320: 75 72 6e 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20  urn..}.    }..  
b330: 20 20 73 65 74 20 64 72 20 24 52 61 6d 44 65 62    set dr $RamDeb
b340: 75 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 64  ugger::options(d
b350: 65 62 75 67 72 65 6c 65 61 73 65 29 0a 0a 20 20  ebugrelease)..  
b360: 20 20 69 66 20 7b 20 24 64 72 20 3d 3d 20 22 62    if { $dr == "b
b370: 6f 74 68 22 20 7d 20 7b 0a 09 57 61 72 6e 57 69  oth" } {..WarnWi
b380: 6e 20 22 65 72 72 6f 72 3a 20 70 72 6f 67 72 61  n "error: progra
b390: 6d 20 6d 75 73 74 20 62 65 20 69 6e 20 64 65 62  m must be in deb
b3a0: 75 67 20 6f 72 20 69 6e 20 72 65 6c 65 61 73 65  ug or in release
b3b0: 20 6d 6f 64 65 22 0a 09 52 61 6d 44 65 62 75 67   mode"..RamDebug
b3c0: 67 65 72 3a 3a 57 61 69 74 53 74 61 74 65 20 30  ger::WaitState 0
b3d0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20  ..return.    }. 
b3e0: 20 20 20 73 65 74 20 6f 62 6a 64 69 72 20 5b 66     set objdir [f
b3f0: 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64  ile join [file d
b400: 69 72 6e 61 6d 65 20 24 70 72 6f 6a 65 63 74 5d  irname $project]
b410: 20 5b 66 69 6c 65 20 72 6f 6f 74 20 24 70 72 6f   [file root $pro
b420: 6a 65 63 74 5d 5f 24 64 72 5d 0a 0a 20 20 20 20  ject]_$dr]..    
b430: 66 6f 72 65 61 63 68 20 69 20 5b 67 6c 6f 62 20  foreach i [glob 
b440: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 64 69 72  -nocomplain -dir
b450: 20 24 6f 62 6a 64 69 72 20 2a 5d 20 7b 0a 09 66   $objdir *] {..f
b460: 69 6c 65 20 64 65 6c 65 74 65 20 24 69 0a 20 20  ile delete $i.  
b470: 20 20 7d 0a 20 20 20 20 52 61 6d 44 65 62 75 67    }.    RamDebug
b480: 67 65 72 3a 3a 54 65 78 74 43 6f 6d 70 43 6c 65  ger::TextCompCle
b490: 61 72 0a 20 20 20 20 52 61 6d 44 65 62 75 67 67  ar.    RamDebugg
b4a0: 65 72 3a 3a 54 65 78 74 43 6f 6d 70 52 61 69 73  er::TextCompRais
b4b0: 65 0a 20 20 20 20 52 61 6d 44 65 62 75 67 67 65  e.    RamDebugge
b4c0: 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65 72  r::TextCompInser
b4d0: 74 20 22 43 6f 6d 70 69 6c 61 74 69 6f 6e 20 66  t "Compilation f
b4e0: 69 6c 65 73 20 64 65 6c 65 74 65 64 22 0a 0a 20  iles deleted".. 
b4f0: 20 20 20 52 61 6d 44 65 62 75 67 67 65 72 3a 3a     RamDebugger::
b500: 57 61 69 74 53 74 61 74 65 20 30 0a 20 20 20 20  WaitState 0.    
b510: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 53 65 74  RamDebugger::Set
b520: 4d 65 73 73 61 67 65 20 22 43 6c 65 61 6e 69 6e  Message "Cleanin
b530: 67 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 66 69  g compilation fi
b540: 6c 65 73 2e 2e 2e 64 6f 6e 65 22 0a 7d 0a 0a 70  les...done".}..p
b550: 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 70 72  roc cproject::pr
b560: 69 6e 74 66 69 6c 65 6e 61 6d 65 20 7b 20 66 69  intfilename { fi
b570: 6c 65 6e 61 6d 65 20 7d 20 7b 0a 20 20 20 20 72  lename } {.    r
b580: 65 67 73 75 62 20 2d 61 6c 6c 20 22 20 22 20 24  egsub -all " " $
b590: 66 69 6c 65 6e 61 6d 65 20 7b 5c 5c 20 7d 20 66  filename {\\ } f
b5a0: 69 6c 65 6e 61 6d 65 0a 20 20 20 20 72 65 74 75  ilename.    retu
b5b0: 72 6e 20 24 66 69 6c 65 6e 61 6d 65 0a 7d 0a 0a  rn $filename.}..
b5c0: 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 54  proc cproject::T
b5d0: 6f 75 63 68 46 69 6c 65 73 20 7b 20 77 20 7d 20  ouchFiles { w } 
b5e0: 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 70  {.    variable p
b5f0: 72 6f 6a 65 63 74 0a 20 20 20 20 76 61 72 69 61  roject.    varia
b600: 62 6c 65 20 66 69 6c 65 73 0a 20 20 20 20 76 61  ble files.    va
b610: 72 69 61 62 6c 65 20 64 61 74 61 43 0a 20 20 20  riable dataC.   
b620: 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 4c 0a   variable dataL.
b630: 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74      variable dat
b640: 61 45 0a 0a 20 20 20 20 73 65 74 20 64 72 20 24  aE..    set dr $
b650: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74  RamDebugger::opt
b660: 69 6f 6e 73 28 64 65 62 75 67 72 65 6c 65 61 73  ions(debugreleas
b670: 65 29 0a 0a 20 20 20 20 52 61 6d 44 65 62 75 67  e)..    RamDebug
b680: 67 65 72 3a 3a 53 65 74 4d 65 73 73 61 67 65 20  ger::SetMessage 
b690: 22 41 63 74 75 61 6c 69 7a 69 6e 67 20 64 61 74  "Actualizing dat
b6a0: 65 20 66 6f 72 20 63 6f 6d 70 69 6c 61 74 69 6f  e for compilatio
b6b0: 6e 20 66 69 6c 65 73 2e 2e 2e 22 0a 20 20 20 20  n files...".    
b6c0: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 57 61 69  RamDebugger::Wai
b6d0: 74 53 74 61 74 65 20 31 0a 0a 20 20 20 20 69 66  tState 1..    if
b6e0: 20 7b 20 24 70 72 6f 6a 65 63 74 20 3d 3d 20 22   { $project == "
b6f0: 22 20 7d 20 7b 0a 09 69 66 20 7b 20 5b 69 6e 66  " } {..if { [inf
b700: 6f 20 65 78 69 73 74 73 20 52 61 6d 44 65 62 75  o exists RamDebu
b710: 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65  gger::options(re
b720: 63 65 6e 74 70 72 6f 6a 65 63 74 73 29 5d 20 26  centprojects)] &
b730: 26 20 5c 0a 09 09 5b 6c 6c 65 6e 67 74 68 20 24  & \...[llength $
b740: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74  RamDebugger::opt
b750: 69 6f 6e 73 28 72 65 63 65 6e 74 70 72 6f 6a 65  ions(recentproje
b760: 63 74 73 29 5d 20 3e 20 30 20 7d 20 7b 0a 09 20  cts)] > 0 } {.. 
b770: 20 20 20 73 65 74 20 70 72 6f 6a 65 63 74 20 5b     set project [
b780: 6c 69 6e 64 65 78 20 24 52 61 6d 44 65 62 75 67  lindex $RamDebug
b790: 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63  ger::options(rec
b7a0: 65 6e 74 70 72 6f 6a 65 63 74 73 29 20 30 5d 0a  entprojects) 0].
b7b0: 09 20 20 20 20 73 65 74 20 65 72 72 20 5b 63 61  .    set err [ca
b7c0: 74 63 68 20 7b 20 63 70 72 6f 6a 65 63 74 3a 3a  tch { cproject::
b7d0: 4f 70 65 6e 50 72 6f 6a 65 63 74 20 24 77 20 30  OpenProject $w 0
b7e0: 20 7d 5d 0a 09 20 20 20 20 69 66 20 7b 20 24 65   }]..    if { $e
b7f0: 72 72 20 7d 20 7b 20 73 65 74 20 70 72 6f 6a 65  rr } { set proje
b800: 63 74 20 22 22 20 7d 0a 09 7d 0a 09 69 66 20 7b  ct "" }..}..if {
b810: 20 24 70 72 6f 6a 65 63 74 20 3d 3d 20 22 22 20   $project == "" 
b820: 7d 20 7b 0a 09 20 20 20 20 63 70 72 6f 6a 65 63  } {..    cprojec
b830: 74 3a 3a 43 72 65 61 74 65 20 24 77 0a 09 20 20  t::Create $w..  
b840: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 20 20 20 20    return..}.    
b850: 7d 0a 20 20 20 20 69 66 20 7b 20 24 64 72 20 3d  }.    if { $dr =
b860: 3d 20 22 62 6f 74 68 22 20 7d 20 7b 0a 09 57 61  = "both" } {..Wa
b870: 72 6e 57 69 6e 20 22 65 72 72 6f 72 3a 20 70 72  rnWin "error: pr
b880: 6f 67 72 61 6d 20 6d 75 73 74 20 62 65 20 69 6e  ogram must be in
b890: 20 64 65 62 75 67 20 6f 72 20 69 6e 20 72 65 6c   debug or in rel
b8a0: 65 61 73 65 20 6d 6f 64 65 22 0a 09 52 61 6d 44  ease mode"..RamD
b8b0: 65 62 75 67 67 65 72 3a 3a 57 61 69 74 53 74 61  ebugger::WaitSta
b8c0: 74 65 20 30 0a 09 72 65 74 75 72 6e 0a 20 20 20  te 0..return.   
b8d0: 20 7d 0a 20 20 20 20 73 65 74 20 6f 62 6a 64 69   }.    set objdi
b8e0: 72 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69  r [file join [fi
b8f0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 70 72 6f 6a  le dirname $proj
b900: 65 63 74 5d 20 5b 66 69 6c 65 20 72 6f 6f 74 20  ect] [file root 
b910: 24 70 72 6f 6a 65 63 74 5d 5f 24 64 72 5d 0a 0a  $project]_$dr]..
b920: 20 20 20 20 73 65 74 20 74 69 6d 65 20 5b 63 6c      set time [cl
b930: 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 20  ock seconds].   
b940: 20 66 6f 72 65 61 63 68 20 69 20 5b 67 6c 6f 62   foreach i [glob
b950: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 64 69   -nocomplain -di
b960: 72 20 24 6f 62 6a 64 69 72 20 2a 5d 20 7b 0a 09  r $objdir *] {..
b970: 66 69 6c 65 20 6d 74 69 6d 65 20 24 69 20 24 74  file mtime $i $t
b980: 69 6d 65 0a 20 20 20 20 7d 0a 0a 20 20 20 20 52  ime.    }..    R
b990: 61 6d 44 65 62 75 67 67 65 72 3a 3a 54 65 78 74  amDebugger::Text
b9a0: 43 6f 6d 70 43 6c 65 61 72 0a 20 20 20 20 52 61  CompClear.    Ra
b9b0: 6d 44 65 62 75 67 67 65 72 3a 3a 54 65 78 74 43  mDebugger::TextC
b9c0: 6f 6d 70 52 61 69 73 65 0a 20 20 20 20 52 61 6d  ompRaise.    Ram
b9d0: 44 65 62 75 67 67 65 72 3a 3a 54 65 78 74 43 6f  Debugger::TextCo
b9e0: 6d 70 49 6e 73 65 72 74 20 22 41 63 74 75 61 6c  mpInsert "Actual
b9f0: 69 7a 65 64 20 64 61 74 65 20 66 6f 72 20 63 6f  ized date for co
ba00: 6d 70 69 6c 61 74 69 6f 6e 20 66 69 6c 65 73 22  mpilation files"
ba10: 0a 0a 20 20 20 20 52 61 6d 44 65 62 75 67 67 65  ..    RamDebugge
ba20: 72 3a 3a 57 61 69 74 53 74 61 74 65 20 30 0a 20  r::WaitState 0. 
ba30: 20 20 20 52 61 6d 44 65 62 75 67 67 65 72 3a 3a     RamDebugger::
ba40: 53 65 74 4d 65 73 73 61 67 65 20 22 41 63 74 75  SetMessage "Actu
ba50: 61 6c 69 7a 69 6e 67 20 64 61 74 65 20 66 6f 72  alizing date for
ba60: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 66 69 6c   compilation fil
ba70: 65 73 2e 2e 2e 64 6f 6e 65 22 0a 7d 0a 0a 70 72  es...done".}..pr
ba80: 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a 43 6f 6d  oc cproject::Com
ba90: 70 69 6c 65 41 6c 6c 20 7b 20 77 20 7d 20 7b 0a  pileAll { w } {.
baa0: 0a 20 20 20 20 52 61 6d 44 65 62 75 67 67 65 72  .    RamDebugger
bab0: 3a 3a 54 65 78 74 43 6f 6d 70 43 6c 65 61 72 0a  ::TextCompClear.
bac0: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 5b 6c      foreach i [l
bad0: 69 73 74 20 64 65 62 75 67 20 72 65 6c 65 61 73  ist debug releas
bae0: 65 5d 20 7b 0a 09 73 65 74 20 72 65 74 76 61 6c  e] {..set retval
baf0: 20 5b 43 6f 6d 70 69 6c 65 44 6f 20 24 77 20 24   [CompileDo $w $
bb00: 69 20 31 20 22 22 5d 0a 09 69 66 20 7b 20 24 72  i 1 ""]..if { $r
bb10: 65 74 76 61 6c 20 3d 3d 20 2d 31 20 7d 20 7b 20  etval == -1 } { 
bb20: 62 72 65 61 6b 20 7d 0a 20 20 20 20 7d 0a 7d 0a  break }.    }.}.
bb30: 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74 3a 3a  .proc cproject::
bb40: 43 6f 6d 70 69 6c 65 20 7b 20 77 20 7b 20 75 6e  Compile { w { un
bb50: 69 71 75 65 5f 66 69 6c 65 20 22 22 20 7d 20 7d  ique_file "" } }
bb60: 20 7b 0a 0a 20 20 20 20 73 65 74 20 64 72 20 24   {..    set dr $
bb70: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74  RamDebugger::opt
bb80: 69 6f 6e 73 28 64 65 62 75 67 72 65 6c 65 61 73  ions(debugreleas
bb90: 65 29 0a 0a 20 20 20 20 52 61 6d 44 65 62 75 67  e)..    RamDebug
bba0: 67 65 72 3a 3a 54 65 78 74 43 6f 6d 70 43 6c 65  ger::TextCompCle
bbb0: 61 72 0a 20 20 20 20 43 6f 6d 70 69 6c 65 44 6f  ar.    CompileDo
bbc0: 20 24 77 20 24 64 72 20 30 20 24 75 6e 69 71 75   $w $dr 0 $uniqu
bbd0: 65 5f 66 69 6c 65 0a 7d 0a 0a 70 72 6f 63 20 63  e_file.}..proc c
bbe0: 70 72 6f 6a 65 63 74 3a 3a 43 6f 6d 70 69 6c 65  project::Compile
bbf0: 4e 6f 53 74 6f 70 20 7b 20 77 20 7d 20 7b 0a 0a  NoStop { w } {..
bc00: 20 20 20 20 73 65 74 20 64 72 20 24 52 61 6d 44      set dr $RamD
bc10: 65 62 75 67 67 65 72 3a 3a 6f 70 74 69 6f 6e 73  ebugger::options
bc20: 28 64 65 62 75 67 72 65 6c 65 61 73 65 29 0a 0a  (debugrelease)..
bc30: 20 20 20 20 52 61 6d 44 65 62 75 67 67 65 72 3a      RamDebugger:
bc40: 3a 54 65 78 74 43 6f 6d 70 43 6c 65 61 72 0a 20  :TextCompClear. 
bc50: 20 20 20 43 6f 6d 70 69 6c 65 44 6f 20 24 77 20     CompileDo $w 
bc60: 24 64 72 20 31 20 22 22 0a 7d 0a 0a 70 72 6f 63  $dr 1 "".}..proc
bc70: 20 63 70 72 6f 6a 65 63 74 3a 3a 43 6f 6d 70 69   cproject::Compi
bc80: 6c 65 44 6f 20 7b 20 77 20 64 65 62 72 65 6c 20  leDo { w debrel 
bc90: 6e 6f 73 74 6f 70 20 7b 20 75 6e 69 71 75 65 5f  nostop { unique_
bca0: 66 69 6c 65 20 22 22 20 7d 20 7d 20 7b 0a 20 20  file "" } } {.  
bcb0: 20 20 76 61 72 69 61 62 6c 65 20 70 72 6f 6a 65    variable proje
bcc0: 63 74 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ct.    variable 
bcd0: 66 69 6c 65 73 0a 20 20 20 20 76 61 72 69 61 62  files.    variab
bce0: 6c 65 20 64 61 74 61 43 0a 20 20 20 20 76 61 72  le dataC.    var
bcf0: 69 61 62 6c 65 20 64 61 74 61 4c 0a 20 20 20 20  iable dataL.    
bd00: 76 61 72 69 61 62 6c 65 20 64 61 74 61 45 0a 20  variable dataE. 
bd10: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 69 6e 6b     variable link
bd20: 73 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 63  s.    variable c
bd30: 6f 6d 70 69 6c 61 74 69 6f 6e 73 74 61 74 75 73  ompilationstatus
bd40: 0a 0a 20 20 20 20 69 66 20 7b 20 24 70 72 6f 6a  ..    if { $proj
bd50: 65 63 74 20 3d 3d 20 22 22 20 7d 20 7b 0a 09 69  ect == "" } {..i
bd60: 66 20 7b 20 5b 69 6e 66 6f 20 65 78 69 73 74 73  f { [info exists
bd70: 20 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70   RamDebugger::op
bd80: 74 69 6f 6e 73 28 72 65 63 65 6e 74 70 72 6f 6a  tions(recentproj
bd90: 65 63 74 73 29 5d 20 26 26 20 5c 0a 09 09 5b 6c  ects)] && \...[l
bda0: 6c 65 6e 67 74 68 20 24 52 61 6d 44 65 62 75 67  length $RamDebug
bdb0: 67 65 72 3a 3a 6f 70 74 69 6f 6e 73 28 72 65 63  ger::options(rec
bdc0: 65 6e 74 70 72 6f 6a 65 63 74 73 29 5d 20 3e 20  entprojects)] > 
bdd0: 30 20 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 70  0 } {..    set p
bde0: 72 6f 6a 65 63 74 20 5b 6c 69 6e 64 65 78 20 24  roject [lindex $
bdf0: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6f 70 74  RamDebugger::opt
be00: 69 6f 6e 73 28 72 65 63 65 6e 74 70 72 6f 6a 65  ions(recentproje
be10: 63 74 73 29 20 30 5d 0a 09 20 20 20 20 73 65 74  cts) 0]..    set
be20: 20 65 72 72 20 5b 63 61 74 63 68 20 7b 20 63 70   err [catch { cp
be30: 72 6f 6a 65 63 74 3a 3a 4f 70 65 6e 50 72 6f 6a  roject::OpenProj
be40: 65 63 74 20 24 77 20 30 20 7d 5d 0a 09 20 20 20  ect $w 0 }]..   
be50: 20 69 66 20 7b 20 24 65 72 72 20 7d 20 7b 20 73   if { $err } { s
be60: 65 74 20 70 72 6f 6a 65 63 74 20 22 22 20 7d 0a  et project "" }.
be70: 09 7d 0a 09 69 66 20 7b 20 24 70 72 6f 6a 65 63  .}..if { $projec
be80: 74 20 3d 3d 20 22 22 20 7d 20 7b 0a 09 20 20 20  t == "" } {..   
be90: 20 63 70 72 6f 6a 65 63 74 3a 3a 43 72 65 61 74   cproject::Creat
bea0: 65 20 24 77 0a 09 20 20 20 20 72 65 74 75 72 6e  e $w..    return
beb0: 20 2d 31 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20   -1..}.    }..  
bec0: 20 20 69 66 20 7b 20 24 64 65 62 72 65 6c 20 21    if { $debrel !
bed0: 3d 20 22 64 65 62 75 67 22 20 26 26 20 24 64 65  = "debug" && $de
bee0: 62 72 65 6c 20 21 3d 20 22 72 65 6c 65 61 73 65  brel != "release
bef0: 22 20 7d 20 7b 0a 09 57 61 72 6e 57 69 6e 20 22  " } {..WarnWin "
bf00: 65 72 72 6f 72 3a 20 70 72 6f 67 72 61 6d 20 6d  error: program m
bf10: 75 73 74 20 62 65 20 69 6e 20 64 65 62 75 67 20  ust be in debug 
bf20: 6f 72 20 69 6e 20 72 65 6c 65 61 73 65 20 6d 6f  or in release mo
bf30: 64 65 22 0a 09 72 65 74 75 72 6e 20 2d 31 0a 20  de"..return -1. 
bf40: 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 20 5b 61     }.    if { [a
bf50: 75 74 6f 5f 65 78 65 63 6f 6b 20 67 63 63 5d 20  uto_execok gcc] 
bf60: 3d 3d 20 22 22 20 7d 20 7b 0a 09 73 65 74 20 72  == "" } {..set r
bf70: 65 74 20 5b 44 69 61 6c 6f 67 57 69 6e 3a 3a 6d  et [DialogWin::m
bf80: 65 73 73 61 67 65 42 6f 78 20 2d 64 65 66 61 75  essageBox -defau
bf90: 6c 74 20 79 65 73 20 2d 69 63 6f 6e 20 71 75 65  lt yes -icon que
bfa0: 73 74 69 6f 6e 20 2d 6d 65 73 73 61 67 65 20 5c  stion -message \
bfb0: 0a 09 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f 74  ..    "Could not
bfc0: 20 66 69 6e 64 20 63 6f 6d 6d 61 6e 64 20 27 67   find command 'g
bfd0: 63 63 27 2e 20 44 6f 20 79 6f 75 20 77 61 6e 74  cc'. Do you want
bfe0: 20 74 6f 20 73 65 65 20 74 68 65 20 68 65 6c 70   to see the help
bff0: 3f 22 20 2d 70 61 72 65 6e 74 20 24 77 20 5c 0a  ?" -parent $w \.
c000: 09 20 20 20 20 2d 74 69 74 6c 65 20 22 43 6f 6d  .    -title "Com
c010: 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 22 20  mand not found" 
c020: 2d 74 79 70 65 20 79 65 73 6e 6f 5d 0a 09 69 66  -type yesno]..if
c030: 20 7b 20 24 72 65 74 20 3d 3d 20 22 79 65 73 22   { $ret == "yes"
c040: 20 7d 20 7b 0a 09 20 20 20 20 52 61 6d 44 65 62   } {..    RamDeb
c050: 75 67 67 65 72 3a 3a 56 69 65 77 48 65 6c 70 46  ugger::ViewHelpF
c060: 6f 72 57 6f 72 64 20 22 44 65 62 75 67 67 69 6e  orWord "Debuggin
c070: 67 20 63 2b 2b 22 0a 09 20 20 20 20 23 52 61 6d  g c++"..    #Ram
c080: 44 65 62 75 67 67 65 72 3a 3a 56 69 65 77 48 65  Debugger::ViewHe
c090: 6c 70 46 69 6c 65 20 22 30 31 52 61 6d 44 65 62  lpFile "01RamDeb
c0a0: 75 67 67 65 72 2f 52 61 6d 44 65 62 75 67 67 65  ugger/RamDebugge
c0b0: 72 5f 31 32 2e 68 74 6d 6c 22 0a 09 7d 0a 09 72  r_12.html"..}..r
c0c0: 65 74 75 72 6e 20 2d 31 0a 20 20 20 20 7d 0a 20  eturn -1.    }. 
c0d0: 20 20 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a     $RamDebugger:
c0e0: 3a 6d 61 69 6e 66 72 61 6d 65 20 73 65 74 6d 65  :mainframe setme
c0f0: 6e 75 73 74 61 74 65 20 64 65 62 75 67 65 6e 74  nustate debugent
c100: 72 79 20 64 69 73 61 62 6c 65 64 0a 20 20 20 20  ry disabled.    
c110: 24 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 6d 61  $RamDebugger::ma
c120: 69 6e 66 72 61 6d 65 20 73 65 74 6d 65 6e 75 73  inframe setmenus
c130: 74 61 74 65 20 63 2b 2b 65 6e 74 72 79 20 64 69  tate c++entry di
c140: 73 61 62 6c 65 64 0a 20 20 20 20 24 52 61 6d 44  sabled.    $RamD
c150: 65 62 75 67 67 65 72 3a 3a 6d 61 69 6e 66 72 61  ebugger::mainfra
c160: 6d 65 20 73 65 74 6d 65 6e 75 73 74 61 74 65 20  me setmenustate 
c170: 61 63 74 69 76 65 63 6f 6e 66 69 67 75 72 61 74  activeconfigurat
c180: 69 6f 6e 20 64 69 73 61 62 6c 65 64 0a 0a 20 20  ion disabled..  
c190: 20 20 73 65 74 20 6d 65 6e 75 20 5b 24 52 61 6d    set menu [$Ram
c1a0: 44 65 62 75 67 67 65 72 3a 3a 6d 61 69 6e 66 72  Debugger::mainfr
c1b0: 61 6d 65 20 67 65 74 6d 65 6e 75 20 63 2b 2b 5d  ame getmenu c++]
c1c0: 0a 20 20 20 20 24 6d 65 6e 75 20 61 64 64 20 73  .    $menu add s
c1d0: 65 70 61 72 61 74 6f 72 0a 20 20 20 20 24 6d 65  eparator.    $me
c1e0: 6e 75 20 61 64 64 20 63 6f 6d 6d 61 6e 64 20 2d  nu add command -
c1f0: 6c 61 62 65 6c 20 22 53 74 6f 70 20 63 6f 6d 70  label "Stop comp
c200: 69 6c 69 6e 67 22 20 2d 63 6f 6d 6d 61 6e 64 20  iling" -command 
c210: 5c 0a 20 20 20 20 20 20 20 22 73 65 74 20 3a 3a  \.       "set ::
c220: 63 70 72 6f 6a 65 63 74 3a 3a 63 6f 6d 70 69 6c  cproject::compil
c230: 61 74 69 6f 6e 73 74 61 74 75 73 20 32 22 0a 0a  ationstatus 2"..
c240: 20 20 20 20 73 65 74 20 70 77 64 20 5b 70 77 64      set pwd [pwd
c250: 5d 0a 20 20 20 20 63 64 20 5b 66 69 6c 65 20 64  ].    cd [file d
c260: 69 72 6e 61 6d 65 20 24 70 72 6f 6a 65 63 74 5d  irname $project]
c270: 0a 0a 20 20 20 20 73 65 74 20 6f 62 6a 64 69 72  ..    set objdir
c280: 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 66 69 6c   [file tail [fil
c290: 65 20 72 6f 6f 74 20 24 70 72 6f 6a 65 63 74 5d  e root $project]
c2a0: 5d 5f 24 64 65 62 72 65 6c 0a 20 20 20 20 69 66  ]_$debrel.    if
c2b0: 20 7b 20 21 5b 66 69 6c 65 20 65 78 69 73 74 73   { ![file exists
c2c0: 20 24 6f 62 6a 64 69 72 5d 20 7d 20 7b 20 66 69   $objdir] } { fi
c2d0: 6c 65 20 6d 6b 64 69 72 20 24 6f 62 6a 64 69 72  le mkdir $objdir
c2e0: 20 7d 0a 0a 20 20 20 20 73 65 74 20 63 70 72 6f   }..    set cpro
c2f0: 6a 65 63 74 3a 3a 63 6f 6d 70 69 6c 61 74 69 6f  ject::compilatio
c300: 6e 73 74 61 74 75 73 20 2d 31 0a 0a 20 20 20 20  nstatus -1..    
c310: 73 65 74 20 63 61 74 63 68 5f 65 72 72 20 5b 63  set catch_err [c
c320: 61 74 63 68 20 7b 0a 09 69 66 20 7b 20 24 75 6e  atch {..if { $un
c330: 69 71 75 65 5f 66 69 6c 65 20 21 3d 20 22 22 20  ique_file != "" 
c340: 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 66 6f 75  } {..    set fou
c350: 6e 64 20 30 0a 09 20 20 20 20 73 65 74 20 75 6e  nd 0..    set un
c360: 69 71 75 65 5f 66 69 6c 65 20 5b 52 61 6d 44 65  ique_file [RamDe
c370: 62 75 67 67 65 72 3a 3a 66 69 6c 65 6e 6f 72 6d  bugger::filenorm
c380: 61 6c 69 7a 65 20 24 75 6e 69 71 75 65 5f 66 69  alize $unique_fi
c390: 6c 65 5d 0a 09 20 20 20 20 66 6f 72 65 61 63 68  le]..    foreach
c3a0: 20 69 20 24 66 69 6c 65 73 20 7b 0a 09 09 66 6f   i $files {...fo
c3b0: 72 65 61 63 68 20 22 66 69 6c 65 5f 69 6e 20 74  reach "file_in t
c3c0: 79 70 65 20 67 72 6f 75 70 5f 69 6e 20 70 61 74  ype group_in pat
c3d0: 68 22 20 24 69 20 62 72 65 61 6b 0a 09 09 73 65  h" $i break...se
c3e0: 74 20 66 69 6c 65 5f 69 6e 32 20 5b 52 61 6d 44  t file_in2 [RamD
c3f0: 65 62 75 67 67 65 72 3a 3a 66 69 6c 65 6e 6f 72  ebugger::filenor
c400: 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 6a 6f 69  malize [file joi
c410: 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  n [file dirname 
c420: 24 70 72 6f 6a 65 63 74 5d 20 5c 0a 09 09 20 20  $project] \...  
c430: 20 20 20 20 20 20 24 70 61 74 68 20 24 66 69 6c        $path $fil
c440: 65 5f 69 6e 5d 5d 0a 09 09 69 66 20 7b 20 5b 73  e_in]]...if { [s
c450: 74 72 69 6e 67 20 65 71 75 61 6c 20 24 66 69 6c  tring equal $fil
c460: 65 5f 69 6e 32 20 24 75 6e 69 71 75 65 5f 66 69  e_in2 $unique_fi
c470: 6c 65 5d 20 7d 20 7b 0a 09 09 20 20 20 20 73 65  le] } {...    se
c480: 74 20 63 6f 6d 70 66 69 6c 65 73 20 5b 6c 69 73  t compfiles [lis
c490: 74 20 24 69 5d 0a 09 09 20 20 20 20 73 65 74 20  t $i]...    set 
c4a0: 66 6f 75 6e 64 20 31 0a 09 09 20 20 20 20 62 72  found 1...    br
c4b0: 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09  eak...}..    }..
c4c0: 20 20 20 20 69 66 20 7b 20 21 24 66 6f 75 6e 64      if { !$found
c4d0: 20 7d 20 7b 0a 09 09 57 61 72 6e 57 69 6e 20 22   } {...WarnWin "
c4e0: 65 72 72 6f 72 3a 20 66 69 6c 65 20 27 24 75 6e  error: file '$un
c4f0: 69 71 75 65 5f 66 69 6c 65 27 20 69 73 20 6e 6f  ique_file' is no
c500: 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  t included in th
c510: 65 20 63 6f 6d 70 69 6c 65 20 70 72 6f 6a 65 63  e compile projec
c520: 74 22 0a 09 09 73 65 74 20 63 70 72 6f 6a 65 63  t"...set cprojec
c530: 74 3a 3a 63 6f 6d 70 69 6c 61 74 69 6f 6e 73 74  t::compilationst
c540: 61 74 75 73 20 31 0a 09 09 73 65 74 20 63 6f 6d  atus 1...set com
c550: 70 66 69 6c 65 73 20 22 22 0a 09 20 20 20 20 7d  pfiles ""..    }
c560: 0a 09 20 20 20 20 73 65 74 20 66 6f 72 63 65 63  ..    set forcec
c570: 6f 6d 70 69 6c 65 20 31 0a 09 20 20 20 20 73 65  ompile 1..    se
c580: 74 20 70 72 6f 6a 65 63 74 5f 73 68 6f 72 74 20  t project_short 
c590: 22 24 66 69 6c 65 5f 69 6e 20 24 64 65 62 72 65  "$file_in $debre
c5a0: 6c 22 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  l"..} else {..  
c5b0: 20 20 73 65 74 20 63 6f 6d 70 66 69 6c 65 73 20    set compfiles 
c5c0: 24 66 69 6c 65 73 0a 09 20 20 20 20 73 65 74 20  $files..    set 
c5d0: 66 6f 72 63 65 63 6f 6d 70 69 6c 65 20 30 0a 09  forcecompile 0..
c5e0: 20 20 20 20 73 65 74 20 70 72 6f 6a 65 63 74 5f      set project_
c5f0: 73 68 6f 72 74 20 22 5b 66 69 6c 65 20 72 6f 6f  short "[file roo
c600: 74 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 70 72  t [file tail $pr
c610: 6f 6a 65 63 74 5d 5d 20 24 64 65 62 72 65 6c 22  oject]] $debrel"
c620: 0a 09 7d 0a 09 0a 09 52 61 6d 44 65 62 75 67 67  ..}....RamDebugg
c630: 65 72 3a 3a 54 65 78 74 43 6f 6d 70 52 61 69 73  er::TextCompRais
c640: 65 0a 09 52 61 6d 44 65 62 75 67 67 65 72 3a 3a  e..RamDebugger::
c650: 54 65 78 74 43 6f 6d 70 49 6e 73 65 72 74 20 22  TextCompInsert "
c660: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 2d  [string repeat -
c670: 20 32 30 5d 43 6f 6d 70 69 6c 69 6e 67 20 24 70   20]Compiling $p
c680: 72 6f 6a 65 63 74 5f 73 68 6f 72 74 22 0a 09 52  roject_short"..R
c690: 61 6d 44 65 62 75 67 67 65 72 3a 3a 54 65 78 74  amDebugger::Text
c6a0: 43 6f 6d 70 49 6e 73 65 72 74 20 22 5b 73 74 72  CompInsert "[str
c6b0: 69 6e 67 20 72 65 70 65 61 74 20 2d 20 32 30 5d  ing repeat - 20]
c6c0: 5c 6e 22 0a 09 75 70 64 61 74 65 0a 0a 09 73 65  \n"..update...se
c6d0: 74 20 6d 61 6b 65 20 5b 66 69 6c 65 20 6a 6f 69  t make [file joi
c6e0: 6e 20 24 6f 62 6a 64 69 72 20 4d 61 6b 65 66 69  n $objdir Makefi
c6f0: 6c 65 2e 72 61 6d 64 65 62 75 67 67 65 72 5d 0a  le.ramdebugger].
c700: 09 69 66 20 7b 20 24 75 6e 69 71 75 65 5f 66 69  .if { $unique_fi
c710: 6c 65 20 21 3d 20 22 22 20 7d 20 7b 20 61 70 70  le != "" } { app
c720: 65 6e 64 20 6d 61 6b 65 20 31 20 7d 0a 0a 09 73  end make 1 }...s
c730: 65 74 20 66 6f 75 74 20 5b 6f 70 65 6e 20 24 6d  et fout [open $m
c740: 61 6b 65 20 77 5d 0a 09 0a 09 70 75 74 73 20 2d  ake w]....puts -
c750: 6e 6f 6e 65 77 6c 69 6e 65 20 20 24 66 6f 75 74  nonewline  $fout
c760: 20 22 5c 6e 23 20 4d 61 6b 65 66 69 6c 65 20 20   "\n# Makefile  
c770: 2d 2a 2d 20 6d 61 6b 65 66 69 6c 65 20 2d 2a 2d  -*- makefile -*-
c780: 20 22 0a 09 70 75 74 73 20 24 66 6f 75 74 20 22   "..puts $fout "
c790: 43 72 65 61 74 65 64 3a 20 5b 63 6c 6f 63 6b 20  Created: [clock 
c7a0: 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
c7b0: 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 7b  conds] -format {
c7c0: 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25  %Y-%m-%d %H:%M:%
c7d0: 53 7d 5d 22 0a 09 70 75 74 73 20 24 66 6f 75 74  S}]"..puts $fout
c7e0: 20 22 5c 6e 5b 73 74 72 69 6e 67 20 72 65 70 65   "\n[string repe
c7f0: 61 74 20 23 20 38 30 5d 22 0a 09 70 75 74 73 20  at # 80]"..puts 
c800: 24 66 6f 75 74 20 22 23 20 4d 61 6b 65 66 69 6c  $fout "# Makefil
c810: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
c820: 6d 61 64 65 20 62 79 20 52 61 6d 44 65 62 75 67  made by RamDebug
c830: 67 65 72 22 0a 09 70 75 74 73 20 24 66 6f 75 74  ger"..puts $fout
c840: 20 22 23 20 20 20 20 20 65 78 65 63 75 74 65 20   "#     execute 
c850: 69 74 20 66 72 6f 6d 20 74 68 65 20 75 70 70 65  it from the uppe
c860: 72 20 64 69 72 65 63 74 6f 72 79 22 0a 09 70 75  r directory"..pu
c870: 74 73 20 24 66 6f 75 74 20 22 5b 73 74 72 69 6e  ts $fout "[strin
c880: 67 20 72 65 70 65 61 74 20 23 20 38 30 5d 5c 6e  g repeat # 80]\n
c890: 22 0a 0a 09 69 66 20 7b 20 24 75 6e 69 71 75 65  "...if { $unique
c8a0: 5f 66 69 6c 65 20 3d 3d 20 22 22 20 7d 20 7b 0a  _file == "" } {.
c8b0: 09 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77  .    puts -nonew
c8c0: 6c 69 6e 65 20 24 66 6f 75 74 20 22 61 6c 6c 3a  line $fout "all:
c8d0: 20 22 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   "..    foreach 
c8e0: 6c 69 6e 6b 20 24 6c 69 6e 6b 73 20 7b 0a 09 09  link $links {...
c8f0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
c900: 24 66 6f 75 74 20 22 5b 66 69 6c 65 20 6a 6f 69  $fout "[file joi
c910: 6e 20 24 6f 62 6a 64 69 72 20 24 64 61 74 61 4c  n $objdir $dataL
c920: 28 24 64 65 62 72 65 6c 2c 24 6c 69 6e 6b 2c 6c  ($debrel,$link,l
c930: 69 6e 6b 65 78 65 29 5d 20 22 0a 09 20 20 20 20  inkexe)] "..    
c940: 7d 0a 09 20 20 20 20 70 75 74 73 20 24 66 6f 75  }..    puts $fou
c950: 74 20 22 5c 6e 22 0a 09 7d 0a 0a 09 66 6f 72 65  t "\n"..}...fore
c960: 61 63 68 20 69 20 24 63 6f 6d 70 66 69 6c 65 73  ach i $compfiles
c970: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   {..    foreach 
c980: 22 66 69 6c 65 5f 69 6e 20 74 79 70 65 20 67 72  "file_in type gr
c990: 6f 75 70 5f 69 6e 20 70 61 74 68 22 20 24 69 20  oup_in path" $i 
c9a0: 62 72 65 61 6b 0a 0a 09 20 20 20 20 69 66 20 7b  break...    if {
c9b0: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 64   [string trim $d
c9c0: 61 74 61 43 28 24 67 72 6f 75 70 5f 69 6e 2c 24  ataC($group_in,$
c9d0: 64 65 62 72 65 6c 2c 63 6f 6d 70 69 6c 65 72 29  debrel,compiler)
c9e0: 5d 20 3d 3d 20 22 22 20 7d 20 7b 20 63 6f 6e 74  ] == "" } { cont
c9f0: 69 6e 75 65 20 7d 0a 0a 09 20 20 20 20 73 65 74  inue }...    set
ca00: 20 66 69 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e   file [file join
ca10: 20 24 70 61 74 68 20 24 66 69 6c 65 5f 69 6e 5d   $path $file_in]
ca20: 0a 09 20 20 20 20 73 65 74 20 6f 62 6a 66 69 6c  ..    set objfil
ca30: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6f 62  e [file join $ob
ca40: 6a 64 69 72 20 5b 66 69 6c 65 20 72 6f 6f 74 20  jdir [file root 
ca50: 24 66 69 6c 65 5f 69 6e 5d 2e 6f 5d 0a 09 20 20  $file_in].o]..  
ca60: 20 20 0a 09 20 20 20 20 69 66 20 7b 20 24 66 6f    ..    if { $fo
ca70: 72 63 65 63 6f 6d 70 69 6c 65 20 26 26 20 5b 66  rcecompile && [f
ca80: 69 6c 65 20 65 78 69 73 74 73 20 24 6f 62 6a 66  ile exists $objf
ca90: 69 6c 65 5d 20 7d 20 7b 0a 09 09 66 69 6c 65 20  ile] } {...file 
caa0: 64 65 6c 65 74 65 20 24 6f 62 6a 66 69 6c 65 0a  delete $objfile.
cab0: 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20  .    }..    set 
cac0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 5b 53 63  dependencies [Sc
cad0: 61 6e 48 65 61 64 65 72 73 20 24 66 69 6c 65 5d  anHeaders $file]
cae0: 0a 09 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65  ..    puts -none
caf0: 77 6c 69 6e 65 20 24 66 6f 75 74 20 22 5b 70 72  wline $fout "[pr
cb00: 69 6e 74 66 69 6c 65 6e 61 6d 65 20 24 6f 62 6a  intfilename $obj
cb10: 66 69 6c 65 5d 3a 20 5b 70 72 69 6e 74 66 69 6c  file]: [printfil
cb20: 65 6e 61 6d 65 20 24 66 69 6c 65 5d 22 0a 09 20  ename $file]".. 
cb30: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 64 65     foreach i $de
cb40: 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a 09 09 70  pendencies {...p
cb50: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24  uts -nonewline $
cb60: 66 6f 75 74 20 22 20 5b 70 72 69 6e 74 66 69 6c  fout " [printfil
cb70: 65 6e 61 6d 65 20 24 69 5d 22 0a 09 20 20 20 20  ename $i]"..    
cb80: 7d 0a 09 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e  }..    puts -non
cb90: 65 77 6c 69 6e 65 20 24 66 6f 75 74 20 22 5c 6e  ewline $fout "\n
cba0: 5c 74 24 64 61 74 61 43 28 24 67 72 6f 75 70 5f  \t$dataC($group_
cbb0: 69 6e 2c 24 64 65 62 72 65 6c 2c 63 6f 6d 70 69  in,$debrel,compi
cbc0: 6c 65 72 29 20 22 0a 09 20 20 20 20 66 6f 72 65  ler) "..    fore
cbd0: 61 63 68 20 6a 20 24 64 61 74 61 43 28 24 67 72  ach j $dataC($gr
cbe0: 6f 75 70 5f 69 6e 2c 24 64 65 62 72 65 6c 2c 66  oup_in,$debrel,f
cbf0: 6c 61 67 73 29 20 7b 0a 09 09 70 75 74 73 20 2d  lags) {...puts -
cc00: 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 6f 75 74 20  nonewline $fout 
cc10: 22 24 6a 20 22 0a 09 20 20 20 20 7d 0a 09 20 20  "$j "..    }..  
cc20: 20 20 66 6f 72 65 61 63 68 20 6a 20 24 64 61 74    foreach j $dat
cc30: 61 43 28 24 67 72 6f 75 70 5f 69 6e 2c 24 64 65  aC($group_in,$de
cc40: 62 72 65 6c 2c 69 6e 63 6c 75 64 65 64 69 72 73  brel,includedirs
cc50: 29 20 7b 0a 09 09 69 66 20 7b 20 5b 73 74 72 69  ) {...if { [stri
cc60: 6e 67 20 66 69 72 73 74 20 22 20 22 20 24 6a 5d  ng first " " $j]
cc70: 20 3d 3d 20 2d 31 20 7d 20 7b 0a 09 09 20 20 20   == -1 } {...   
cc80: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
cc90: 20 24 66 6f 75 74 20 22 2d 49 24 6a 20 22 0a 09   $fout "-I$j "..
cca0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20  .} else {...    
ccb0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
ccc0: 24 66 6f 75 74 20 22 2d 49 5c 22 24 6a 5c 22 20  $fout "-I\"$j\" 
ccd0: 22 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20  "...}..    }..  
cce0: 20 20 66 6f 72 65 61 63 68 20 6a 20 24 64 61 74    foreach j $dat
ccf0: 61 43 28 24 67 72 6f 75 70 5f 69 6e 2c 24 64 65  aC($group_in,$de
cd00: 62 72 65 6c 2c 64 65 66 69 6e 65 73 29 20 7b 0a  brel,defines) {.
cd10: 09 09 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e  ..puts -nonewlin
cd20: 65 20 24 66 6f 75 74 20 22 2d 44 24 6a 20 22 0a  e $fout "-D$j ".
cd30: 09 20 20 20 20 7d 0a 09 20 20 20 20 70 75 74 73  .    }..    puts
cd40: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 6f 75   -nonewline $fou
cd50: 74 20 22 5c 5c 5c 6e 5c 74 5c 74 2d 6f 20 5b 70  t "\\\n\t\t-o [p
cd60: 72 69 6e 74 66 69 6c 65 6e 61 6d 65 20 24 6f 62  rintfilename $ob
cd70: 6a 66 69 6c 65 5d 20 22 0a 09 20 20 20 20 70 75  jfile] "..    pu
cd80: 74 73 20 24 66 6f 75 74 20 22 5b 70 72 69 6e 74  ts $fout "[print
cd90: 66 69 6c 65 6e 61 6d 65 20 24 66 69 6c 65 5d 5c  filename $file]\
cda0: 6e 22 0a 09 7d 0a 09 69 66 20 7b 20 24 75 6e 69  n"..}..if { $uni
cdb0: 71 75 65 5f 66 69 6c 65 20 3d 3d 20 22 22 20 7d  que_file == "" }
cdc0: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   {..    foreach 
cdd0: 6c 69 6e 6b 20 24 6c 69 6e 6b 73 20 7b 0a 09 09  link $links {...
cde0: 73 65 74 20 6f 62 6a 66 69 6c 65 73 20 22 22 0a  set objfiles "".
cdf0: 09 09 66 6f 72 65 61 63 68 20 69 20 24 66 69 6c  ..foreach i $fil
ce00: 65 73 20 7b 0a 09 09 20 20 20 20 66 6f 72 65 61  es {...    forea
ce10: 63 68 20 22 66 69 6c 65 5f 69 6e 20 74 79 70 65  ch "file_in type
ce20: 20 67 72 6f 75 70 5f 69 6e 20 70 61 74 68 22 20   group_in path" 
ce30: 24 69 20 62 72 65 61 6b 0a 09 09 20 20 20 20 69  $i break...    i
ce40: 66 20 7b 20 5b 6c 73 65 61 72 63 68 20 24 64 61  f { [lsearch $da
ce50: 74 61 4c 28 24 64 65 62 72 65 6c 2c 24 6c 69 6e  taL($debrel,$lin
ce60: 6b 2c 6c 69 6e 6b 67 72 6f 75 70 73 29 20 24 67  k,linkgroups) $g
ce70: 72 6f 75 70 5f 69 6e 5d 20 21 3d 20 2d 31 20 7c  roup_in] != -1 |
ce80: 7c 20 5c 0a 09 09 20 20 20 20 20 20 20 20 20 20  | \...          
ce90: 20 20 5b 6c 73 65 61 72 63 68 20 24 64 61 74 61    [lsearch $data
cea0: 4c 28 24 64 65 62 72 65 6c 2c 24 6c 69 6e 6b 2c  L($debrel,$link,
ceb0: 6c 69 6e 6b 67 72 6f 75 70 73 29 20 41 6c 6c 5d  linkgroups) All]
cec0: 20 21 3d 20 2d 31 20 7d 20 7b 0a 09 09 20 20 20   != -1 } {...   
ced0: 20 20 20 20 20 69 66 20 7b 20 5b 66 69 6c 65 20       if { [file 
cee0: 65 78 74 20 24 66 69 6c 65 5f 69 6e 5d 20 3d 3d  ext $file_in] ==
cef0: 20 22 2e 72 63 22 20 7d 20 7b 0a 09 09 20 20 20   ".rc" } {...   
cf00: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
cf10: 20 6f 62 6a 66 69 6c 65 73 20 5b 66 69 6c 65 20   objfiles [file 
cf20: 6a 6f 69 6e 20 24 70 61 74 68 20 24 66 69 6c 65  join $path $file
cf30: 5f 69 6e 5d 0a 09 09 20 20 20 20 20 20 20 20 7d  _in]...        }
cf40: 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 20 20   else {...      
cf50: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 62        lappend ob
cf60: 6a 66 69 6c 65 73 20 5b 66 69 6c 65 20 6a 6f 69  jfiles [file joi
cf70: 6e 20 24 6f 62 6a 64 69 72 20 5b 66 69 6c 65 20  n $objdir [file 
cf80: 72 6f 6f 74 20 24 66 69 6c 65 5f 69 6e 5d 2e 6f  root $file_in].o
cf90: 5d 0a 09 09 20 20 20 20 20 20 20 20 7d 0a 09 09  ]...        }...
cfa0: 20 20 20 20 7d 0a 09 09 7d 0a 09 09 69 66 20 7b      }...}...if {
cfb0: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 64   [string trim $d
cfc0: 61 74 61 4c 28 24 64 65 62 72 65 6c 2c 24 6c 69  ataL($debrel,$li
cfd0: 6e 6b 2c 6c 69 6e 6b 65 78 65 29 5d 20 3d 3d 20  nk,linkexe)] == 
cfe0: 22 22 20 7d 20 7b 0a 09 09 20 20 20 20 73 65 74  "" } {...    set
cff0: 20 74 74 20 22 57 41 52 4e 49 4e 47 3a 20 6e 6f   tt "WARNING: no
d000: 20 6f 75 74 70 75 74 20 6e 61 6d 65 20 66 6f 72   output name for
d010: 20 6c 69 6e 6b 69 6e 67 20 74 61 72 67 65 74 20   linking target 
d020: 27 24 6c 69 6e 6b 27 2e 20 22 0a 09 09 20 20 20  '$link'. "...   
d030: 20 61 70 70 65 6e 64 20 74 74 20 22 61 73 73 75   append tt "assu
d040: 6d 69 6e 67 20 27 70 72 6f 67 72 61 6d 5f 24 6c  ming 'program_$l
d050: 69 6e 6b 2e 65 78 65 27 5c 6e 22 0a 09 09 20 20  ink.exe'\n"...  
d060: 20 20 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 54    RamDebugger::T
d070: 65 78 74 43 6f 6d 70 49 6e 73 65 72 74 52 65 64  extCompInsertRed
d080: 20 24 74 74 0a 09 09 20 20 20 20 73 65 74 20 6f   $tt...    set o
d090: 75 74 70 75 74 6e 61 6d 65 20 5b 66 69 6c 65 20  utputname [file 
d0a0: 6a 6f 69 6e 20 24 6f 62 6a 64 69 72 20 70 72 6f  join $objdir pro
d0b0: 67 72 61 6d 5f 24 6c 69 6e 6b 2e 65 78 65 5d 0a  gram_$link.exe].
d0c0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20  ..} else {...   
d0d0: 20 73 65 74 20 6f 75 74 70 75 74 6e 61 6d 65 20   set outputname 
d0e0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6f 62 6a 64  [file join $objd
d0f0: 69 72 20 24 64 61 74 61 4c 28 24 64 65 62 72 65  ir $dataL($debre
d100: 6c 2c 24 6c 69 6e 6b 2c 6c 69 6e 6b 65 78 65 29  l,$link,linkexe)
d110: 5d 0a 09 09 7d 0a 0a 09 09 73 65 74 20 74 61 72  ]...}....set tar
d120: 67 65 74 20 5b 73 74 72 69 6e 67 20 74 6f 75 70  get [string toup
d130: 70 65 72 20 4f 42 4a 46 49 4c 45 53 5f 24 6c 69  per OBJFILES_$li
d140: 6e 6b 5d 0a 09 09 73 65 74 20 73 74 72 69 6e 67  nk]...set string
d150: 20 22 24 74 61 72 67 65 74 20 3d 20 22 0a 09 09   "$target = "...
d160: 66 6f 72 65 61 63 68 20 69 20 24 6f 62 6a 66 69  foreach i $objfi
d170: 6c 65 73 20 7b 0a 09 09 20 20 20 20 61 70 70 65  les {...    appe
d180: 6e 64 20 73 74 72 69 6e 67 20 22 24 69 20 22 0a  nd string "$i ".
d190: 09 09 20 20 20 20 69 66 20 7b 20 5b 73 74 72 69  ..    if { [stri
d1a0: 6e 67 20 6c 65 6e 67 74 68 20 24 73 74 72 69 6e  ng length $strin
d1b0: 67 5d 20 3e 20 37 30 20 7d 20 7b 0a 09 09 20 20  g] > 70 } {...  
d1c0: 20 20 20 20 20 20 70 75 74 73 20 24 66 6f 75 74        puts $fout
d1d0: 20 22 24 73 74 72 69 6e 67 20 5c 5c 22 0a 09 09   "$string \\"...
d1e0: 20 20 20 20 20 20 20 20 73 65 74 20 73 74 72 69          set stri
d1f0: 6e 67 20 22 22 0a 09 09 20 20 20 20 7d 0a 09 09  ng ""...    }...
d200: 7d 0a 09 09 70 75 74 73 20 24 66 6f 75 74 20 22  }...puts $fout "
d210: 24 73 74 72 69 6e 67 5c 6e 22 0a 0a 09 09 70 75  $string\n"....pu
d220: 74 73 20 24 66 6f 75 74 20 22 24 6f 75 74 70 75  ts $fout "$outpu
d230: 74 6e 61 6d 65 3a 20 5c 24 28 24 74 61 72 67 65  tname: \$($targe
d240: 74 29 22 0a 09 09 70 75 74 73 20 2d 6e 6f 6e 65  t)"...puts -none
d250: 77 6c 69 6e 65 20 24 66 6f 75 74 20 22 5c 74 24  wline $fout "\t$
d260: 64 61 74 61 4c 28 24 64 65 62 72 65 6c 2c 24 6c  dataL($debrel,$l
d270: 69 6e 6b 2c 6c 69 6e 6b 65 72 29 20 22 0a 09 09  ink,linker) "...
d280: 66 6f 72 65 61 63 68 20 6a 20 24 64 61 74 61 4c  foreach j $dataL
d290: 28 24 64 65 62 72 65 6c 2c 24 6c 69 6e 6b 2c 6c  ($debrel,$link,l
d2a0: 69 6e 6b 66 6c 61 67 73 29 20 7b 0a 09 09 20 20  inkflags) {...  
d2b0: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
d2c0: 65 20 24 66 6f 75 74 20 20 22 24 6a 20 22 0a 09  e $fout  "$j "..
d2d0: 09 7d 0a 09 09 70 75 74 73 20 2d 6e 6f 6e 65 77  .}...puts -nonew
d2e0: 6c 69 6e 65 20 24 66 6f 75 74 20 22 2d 6f 20 24  line $fout "-o $
d2f0: 6f 75 74 70 75 74 6e 61 6d 65 20 5c 24 28 24 74  outputname \$($t
d300: 61 72 67 65 74 29 20 22 0a 09 09 66 6f 72 65 61  arget) "...forea
d310: 63 68 20 6a 20 24 64 61 74 61 4c 28 24 64 65 62  ch j $dataL($deb
d320: 72 65 6c 2c 24 6c 69 6e 6b 2c 6c 69 62 72 61 72  rel,$link,librar
d330: 69 65 73 64 69 72 73 29 20 7b 0a 09 09 20 20 20  iesdirs) {...   
d340: 20 69 66 20 7b 20 24 64 61 74 61 4c 28 24 64 65   if { $dataL($de
d350: 62 72 65 6c 2c 24 6c 69 6e 6b 2c 6c 69 6e 6b 65  brel,$link,linke
d360: 72 29 20 21 3d 20 22 77 69 6e 64 72 65 73 22 20  r) != "windres" 
d370: 7d 20 7b 0a 09 09 20 20 20 20 20 20 20 20 69 66  } {...        if
d380: 20 7b 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74   { [string first
d390: 20 22 20 22 20 24 6a 5d 20 3d 3d 20 2d 31 20 7d   " " $j] == -1 }
d3a0: 20 7b 0a 09 09 20 20 20 20 20 20 20 20 20 20 20   {...           
d3b0: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
d3c0: 20 24 66 6f 75 74 20 22 2d 4c 24 6a 20 22 0a 09   $fout "-L$j "..
d3d0: 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
d3e0: 7b 0a 09 09 20 20 20 20 20 20 20 20 20 20 20 20  {...            
d3f0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
d400: 24 66 6f 75 74 20 22 2d 4c 5c 22 24 6a 5c 22 20  $fout "-L\"$j\" 
d410: 22 0a 09 09 20 20 20 20 20 20 20 20 7d 0a 09 09  "...        }...
d420: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 20      } else {... 
d430: 20 20 20 20 20 20 20 69 66 20 7b 20 5b 73 74 72         if { [str
d440: 69 6e 67 20 66 69 72 73 74 20 22 20 22 20 24 6a  ing first " " $j
d450: 5d 20 3d 3d 20 2d 31 20 7d 20 7b 0a 09 09 20 20  ] == -1 } {...  
d460: 20 20 20 20 20 20 20 20 20 20 70 75 74 73 20 2d            puts -
d470: 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 6f 75 74 20  nonewline $fout 
d480: 22 2d 2d 69 6e 63 6c 75 64 65 20 24 6a 20 22 0a  "--include $j ".
d490: 09 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
d4a0: 20 7b 0a 09 09 20 20 20 20 20 20 20 20 20 20 20   {...           
d4b0: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
d4c0: 20 24 66 6f 75 74 20 22 2d 2d 69 6e 63 6c 75 64   $fout "--includ
d4d0: 65 20 5c 22 24 6a 5c 22 20 22 0a 09 09 20 20 20  e \"$j\" "...   
d4e0: 20 20 20 20 20 7d 0a 09 09 20 20 20 20 7d 0a 09       }...    }..
d4f0: 09 7d 0a 09 09 69 66 20 7b 20 24 64 61 74 61 4c  .}...if { $dataL
d500: 28 24 64 65 62 72 65 6c 2c 24 6c 69 6e 6b 2c 6c  ($debrel,$link,l
d510: 69 6e 6b 65 72 29 20 21 3d 20 22 77 69 6e 64 72  inker) != "windr
d520: 65 73 22 20 7d 20 7b 0a 09 09 20 20 20 20 70 75  es" } {...    pu
d530: 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 66  ts -nonewline $f
d540: 6f 75 74 20 22 2d 4c 24 6f 62 6a 64 69 72 20 22  out "-L$objdir "
d550: 0a 09 09 7d 0a 09 09 66 6f 72 65 61 63 68 20 6a  ...}...foreach j
d560: 20 24 64 61 74 61 4c 28 24 64 65 62 72 65 6c 2c   $dataL($debrel,
d570: 24 6c 69 6e 6b 2c 6c 69 62 72 61 72 69 65 73 29  $link,libraries)
d580: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 20 5b 72   {...    if { [r
d590: 65 67 65 78 70 20 7b 5e 6c 69 62 28 2e 2a 29 28  egexp {^lib(.*)(
d5a0: 5c 2e 61 7c 5c 2e 6c 69 62 7c 5c 2e 73 6f 29 24  \.a|\.lib|\.so)$
d5b0: 7d 20 24 6a 20 7b 7d 20 6a 32 5d 20 7d 20 7b 0a  } $j {} j2] } {.
d5c0: 09 09 20 20 20 20 20 20 20 20 70 75 74 73 20 2d  ..        puts -
d5d0: 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 6f 75 74 20  nonewline $fout 
d5e0: 22 2d 6c 24 6a 32 20 22 0a 09 09 20 20 20 20 7d  "-l$j2 "...    }
d5f0: 20 65 6c 73 65 69 66 20 7b 20 5b 72 65 67 65 78   elseif { [regex
d600: 70 20 7b 5e 6c 69 62 28 2e 2a 29 7d 20 24 6a 20  p {^lib(.*)} $j 
d610: 7b 7d 20 6a 32 5d 20 7d 20 7b 0a 09 09 20 20 20  {} j2] } {...   
d620: 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77       puts -nonew
d630: 6c 69 6e 65 20 24 66 6f 75 74 20 22 2d 6c 24 6a  line $fout "-l$j
d640: 32 20 22 0a 09 09 20 20 20 20 7d 20 65 6c 73 65  2 "...    } else
d650: 69 66 20 7b 20 5b 66 69 6c 65 20 65 78 69 73 74  if { [file exist
d660: 73 20 24 6a 5d 20 7d 20 7b 0a 09 09 20 20 20 20  s $j] } {...    
d670: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
d680: 69 6e 65 20 24 66 6f 75 74 20 22 24 6a 20 22 0a  ine $fout "$j ".
d690: 09 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b  ..    } elseif {
d6a0: 20 5b 72 65 67 65 78 70 20 7b 28 3f 69 29 28 2e   [regexp {(?i)(.
d6b0: 2a 29 5c 2e 6c 69 62 7d 20 24 6a 20 7b 7d 20 6a  *)\.lib} $j {} j
d6c0: 32 5d 20 7d 20 7b 0a 09 09 20 20 20 20 20 20 20  2] } {...       
d6d0: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
d6e0: 20 24 66 6f 75 74 20 22 2d 6c 24 6a 32 20 22 0a   $fout "-l$j2 ".
d6f0: 09 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
d700: 09 20 20 20 20 20 20 20 20 70 75 74 73 20 2d 6e  .        puts -n
d710: 6f 6e 65 77 6c 69 6e 65 20 24 66 6f 75 74 20 22  onewline $fout "
d720: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6f 62 6a 64  [file join $objd
d730: 69 72 20 24 6a 5d 20 22 0a 09 09 20 20 20 20 7d  ir $j] "...    }
d740: 0a 09 09 7d 0a 09 09 70 75 74 73 20 24 66 6f 75  ...}...puts $fou
d750: 74 20 22 5c 6e 22 0a 09 20 20 20 20 7d 0a 09 7d  t "\n"..    }..}
d760: 0a 09 63 6c 6f 73 65 20 24 66 6f 75 74 0a 0a 09  ..close $fout...
d770: 69 66 20 7b 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  if { $::tcl_plat
d780: 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 20 3d  form(platform) =
d790: 3d 20 22 77 69 6e 64 6f 77 73 22 20 7d 20 7b 0a  = "windows" } {.
d7a0: 09 20 20 20 20 73 65 74 20 63 6f 6d 6d 20 22 22  .    set comm ""
d7b0: 0a 09 20 20 20 20 23 73 65 74 20 63 6f 6d 6d 20  ..    #set comm 
d7c0: 5b 61 75 74 6f 5f 65 78 65 63 6f 6b 20 73 74 61  [auto_execok sta
d7d0: 72 74 5d 0a 09 20 20 20 20 23 6c 61 70 70 65 6e  rt]..    #lappen
d7e0: 64 20 63 6f 6d 6d 20 20 2f 77 20 2f 6d 0a 09 20  d comm  /w /m.. 
d7f0: 20 20 20 23 6c 61 70 70 65 6e 64 20 63 6f 6d 6d     #lappend comm
d800: 20 20 2f 57 41 49 54 20 2f 4d 49 4e 0a 09 7d 20    /WAIT /MIN..} 
d810: 65 6c 73 65 20 7b 20 73 65 74 20 63 6f 6d 6d 20  else { set comm 
d820: 22 22 20 7d 0a 0a 09 6c 61 70 70 65 6e 64 20 63  "" }...lappend c
d830: 6f 6d 6d 20 6d 61 6b 65 0a 09 69 66 20 7b 20 24  omm make..if { $
d840: 6e 6f 73 74 6f 70 20 7d 20 7b 20 6c 61 70 70 65  nostop } { lappe
d850: 6e 64 20 63 6f 6d 6d 20 2d 6b 20 7d 0a 09 6c 61  nd comm -k }..la
d860: 70 70 65 6e 64 20 63 6f 6d 6d 20 2d 66 20 24 6d  ppend comm -f $m
d870: 61 6b 65 0a 0a 09 69 66 20 7b 20 24 6e 6f 73 74  ake...if { $nost
d880: 6f 70 20 7d 20 7b 0a 09 20 20 20 20 52 61 6d 44  op } {..    RamD
d890: 65 62 75 67 67 65 72 3a 3a 54 65 78 74 43 6f 6d  ebugger::TextCom
d8a0: 70 49 6e 73 65 72 74 20 22 6d 61 6b 65 20 2d 6b  pInsert "make -k
d8b0: 20 2d 66 20 24 6d 61 6b 65 5c 6e 22 0a 09 7d 20   -f $make\n"..} 
d8c0: 65 6c 73 65 20 7b 0a 09 20 20 20 20 52 61 6d 44  else {..    RamD
d8d0: 65 62 75 67 67 65 72 3a 3a 54 65 78 74 43 6f 6d  ebugger::TextCom
d8e0: 70 49 6e 73 65 72 74 20 22 6d 61 6b 65 20 2d 66  pInsert "make -f
d8f0: 20 24 6d 61 6b 65 5c 6e 22 0a 09 7d 0a 09 73 65   $make\n"..}..se
d900: 74 20 66 69 6e 20 5b 6f 70 65 6e 20 22 7c 24 63  t fin [open "|$c
d910: 6f 6d 6d 20 7c 26 20 63 61 74 22 20 72 5d 0a 09  omm |& cat" r]..
d920: 0a 09 66 63 6f 6e 66 69 67 75 72 65 20 24 66 69  ..fconfigure $fi
d930: 6e 20 2d 62 6c 6f 63 6b 69 6e 67 20 30 0a 09 66  n -blocking 0..f
d940: 69 6c 65 65 76 65 6e 74 20 24 66 69 6e 20 72 65  ileevent $fin re
d950: 61 64 61 62 6c 65 20 5b 6c 69 73 74 20 63 70 72  adable [list cpr
d960: 6f 6a 65 63 74 3a 3a 43 6f 6d 70 69 6c 65 46 65  oject::CompileFe
d970: 65 64 62 61 63 6b 20 24 66 69 6e 5d 0a 09 0a 09  edback $fin]....
d980: 76 77 61 69 74 20 63 70 72 6f 6a 65 63 74 3a 3a  vwait cproject::
d990: 63 6f 6d 70 69 6c 61 74 69 6f 6e 73 74 61 74 75  compilationstatu
d9a0: 73 0a 09 0a 09 69 66 20 7b 20 24 63 6f 6d 70 69  s....if { $compi
d9b0: 6c 61 74 69 6f 6e 73 74 61 74 75 73 20 3d 3d 20  lationstatus == 
d9c0: 32 20 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 20  2 } {..    if { 
d9d0: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
d9e0: 70 6c 61 74 66 6f 72 6d 29 20 3d 3d 20 22 77 69  platform) == "wi
d9f0: 6e 64 6f 77 73 22 20 7d 20 7b 0a 09 09 23 20 6d  ndows" } {...# m
da00: 61 79 62 65 20 69 74 20 6b 69 6c 6c 73 20 61 6c  aybe it kills al
da10: 73 6f 20 6f 74 68 65 72 20 63 6f 6d 70 69 6c 61  so other compila
da20: 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 74 68 65 72  tions from other
da30: 20 52 61 6d 44 65 62 75 67 67 65 72 27 73 20 6f   RamDebugger's o
da40: 72 20 6d 61 6e 75 61 6c 20 6d 61 6b 65 27 73 0a  r manual make's.
da50: 09 09 23 20 62 75 74 20 74 68 61 74 27 73 20 6c  ..# but that's l
da60: 69 76 65 20 61 6e 64 20 74 68 61 74 27 73 20 77  ive and that's w
da70: 69 6e 64 6f 77 73 0a 09 09 66 6f 72 65 61 63 68  indows...foreach
da80: 20 69 20 5b 73 70 6c 69 74 20 5b 65 78 65 63 20   i [split [exec 
da90: 74 6c 69 73 74 5d 20 5c 6e 5d 20 7b 0a 09 09 20  tlist] \n] {... 
daa0: 20 20 20 69 66 20 7b 20 5b 73 74 72 69 6e 67 20     if { [string 
dab0: 6d 61 74 63 68 20 2d 6e 6f 63 61 73 65 20 22 2a  match -nocase "*
dac0: 6d 61 6b 65 2e 65 78 65 2a 22 20 24 69 5d 20 7d  make.exe*" $i] }
dad0: 20 7b 0a 09 09 20 20 20 20 20 20 20 20 63 61 74   {...        cat
dae0: 63 68 20 7b 20 65 78 65 63 20 6b 69 6c 6c 20 2f  ch { exec kill /
daf0: 66 20 5b 73 63 61 6e 20 24 69 20 25 64 5d 20 7d  f [scan $i %d] }
db00: 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a 09 20 20  ...    }...}..  
db10: 20 20 7d 0a 09 20 20 20 20 63 61 74 63 68 20 7b    }..    catch {
db20: 20 63 6c 6f 73 65 20 24 66 69 6e 20 7d 0a 09 7d   close $fin }..}
db30: 0a 20 20 20 20 7d 20 63 61 74 63 68 5f 73 74 72  .    } catch_str
db40: 69 6e 67 5d 0a 09 0a 20 20 20 20 69 66 20 7b 20  ing]...    if { 
db50: 24 63 61 74 63 68 5f 65 72 72 20 7d 20 7b 0a 09  $catch_err } {..
db60: 57 61 72 6e 57 69 6e 20 24 63 61 74 63 68 5f 73  WarnWin $catch_s
db70: 74 72 69 6e 67 0a 09 73 65 74 20 63 6f 6d 70 69  tring..set compi
db80: 6c 61 74 69 6f 6e 73 74 61 74 75 73 20 31 0a 20  lationstatus 1. 
db90: 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68     }..    switch
dba0: 20 2d 2d 20 24 63 6f 6d 70 69 6c 61 74 69 6f 6e   -- $compilation
dbb0: 73 74 61 74 75 73 20 7b 0a 09 2d 31 20 7b 0a 09  status {..-1 {..
dbc0: 20 20 20 20 52 61 6d 44 65 62 75 67 67 65 72 3a      RamDebugger:
dbd0: 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65 72 74 20  :TextCompInsert 
dbe0: 22 50 72 6f 6a 65 63 74 20 27 24 70 72 6f 6a 65  "Project '$proje
dbf0: 63 74 5f 73 68 6f 72 74 27 20 69 73 20 75 70 20  ct_short' is up 
dc00: 74 6f 20 64 61 74 65 22 0a 09 7d 0a 09 30 20 7b  to date"..}..0 {
dc10: 0a 09 20 20 20 20 52 61 6d 44 65 62 75 67 67 65  ..    RamDebugge
dc20: 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65 72  r::TextCompInser
dc30: 74 20 22 5b 73 74 72 69 6e 67 20 72 65 70 65 61  t "[string repea
dc40: 74 20 2d 20 32 30 5d 45 6e 64 69 6e 67 20 63 6f  t - 20]Ending co
dc50: 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 22 0a 09  mpilation of "..
dc60: 20 20 20 20 52 61 6d 44 65 62 75 67 67 65 72 3a      RamDebugger:
dc70: 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65 72 74 20  :TextCompInsert 
dc80: 22 24 70 72 6f 6a 65 63 74 5f 73 68 6f 72 74 22  "$project_short"
dc90: 0a 09 20 20 20 20 52 61 6d 44 65 62 75 67 67 65  ..    RamDebugge
dca0: 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65 72  r::TextCompInser
dcb0: 74 20 22 5b 73 74 72 69 6e 67 20 72 65 70 65 61  t "[string repea
dcc0: 74 20 2d 20 32 30 5d 5c 6e 22 0a 09 7d 0a 09 31  t - 20]\n"..}..1
dcd0: 20 7b 0a 09 20 20 20 20 52 61 6d 44 65 62 75 67   {..    RamDebug
dce0: 67 65 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73  ger::TextCompIns
dcf0: 65 72 74 20 22 5b 73 74 72 69 6e 67 20 72 65 70  ert "[string rep
dd00: 65 61 74 20 2d 20 32 30 5d 46 61 69 6c 69 6e 67  eat - 20]Failing
dd10: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20   compilation of 
dd20: 24 70 72 6f 6a 65 63 74 5f 73 68 6f 72 74 22 0a  $project_short".
dd30: 09 20 20 20 20 52 61 6d 44 65 62 75 67 67 65 72  .    RamDebugger
dd40: 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65 72 74  ::TextCompInsert
dd50: 20 22 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74   "[string repeat
dd60: 20 2d 20 32 30 5d 5c 6e 22 0a 09 20 20 20 20 75   - 20]\n"..    u
dd70: 70 64 61 74 65 0a 09 7d 0a 09 32 20 7b 0a 09 20  pdate..}..2 {.. 
dd80: 20 20 20 52 61 6d 44 65 62 75 67 67 65 72 3a 3a     RamDebugger::
dd90: 54 65 78 74 43 6f 6d 70 49 6e 73 65 72 74 20 22  TextCompInsert "
dda0: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 2d  [string repeat -
ddb0: 20 32 30 5d 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   20]compilation 
ddc0: 6f 66 20 24 70 72 6f 6a 65 63 74 5f 73 68 6f 72  of $project_shor
ddd0: 74 20 73 74 6f 70 70 65 64 20 22 0a 09 20 20 20  t stopped "..   
dde0: 20 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 54 65   RamDebugger::Te
ddf0: 78 74 43 6f 6d 70 49 6e 73 65 72 74 20 22 61 74  xtCompInsert "at
de00: 20 75 73 65 72 20 64 65 6d 61 6e 64 5b 73 74 72   user demand[str
de10: 69 6e 67 20 72 65 70 65 61 74 20 2d 20 32 30 5d  ing repeat - 20]
de20: 5c 6e 22 0a 09 20 20 20 20 0a 09 20 20 20 20 75  \n"..    ..    u
de30: 70 64 61 74 65 0a 09 7d 0a 20 20 20 20 7d 0a 20  pdate..}.    }. 
de40: 20 20 20 63 64 20 24 70 77 64 0a 0a 20 20 20 20     cd $pwd..    
de50: 24 6d 65 6e 75 20 64 65 6c 65 74 65 20 65 6e 64  $menu delete end
de60: 0a 20 20 20 20 24 6d 65 6e 75 20 64 65 6c 65 74  .    $menu delet
de70: 65 20 65 6e 64 0a 20 20 20 20 24 52 61 6d 44 65  e end.    $RamDe
de80: 62 75 67 67 65 72 3a 3a 6d 61 69 6e 66 72 61 6d  bugger::mainfram
de90: 65 20 73 65 74 6d 65 6e 75 73 74 61 74 65 20 63  e setmenustate c
dea0: 2b 2b 65 6e 74 72 79 20 6e 6f 72 6d 61 6c 0a 20  ++entry normal. 
deb0: 20 20 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a     $RamDebugger:
dec0: 3a 6d 61 69 6e 66 72 61 6d 65 20 73 65 74 6d 65  :mainframe setme
ded0: 6e 75 73 74 61 74 65 20 64 65 62 75 67 65 6e 74  nustate debugent
dee0: 72 79 20 6e 6f 72 6d 61 6c 0a 20 20 20 20 24 52  ry normal.    $R
def0: 61 6d 44 65 62 75 67 67 65 72 3a 3a 6d 61 69 6e  amDebugger::main
df00: 66 72 61 6d 65 20 73 65 74 6d 65 6e 75 73 74 61  frame setmenusta
df10: 74 65 20 61 63 74 69 76 65 63 6f 6e 66 69 67 75  te activeconfigu
df20: 72 61 74 69 6f 6e 20 6e 6f 72 6d 61 6c 0a 0a 20  ration normal.. 
df30: 20 20 20 69 66 20 7b 20 24 63 6f 6d 70 69 6c 61     if { $compila
df40: 74 69 6f 6e 73 74 61 74 75 73 20 3d 3d 20 32 20  tionstatus == 2 
df50: 7d 20 7b 0a 09 72 65 74 75 72 6e 20 2d 31 0a 20  } {..return -1. 
df60: 20 20 20 7d 20 65 6c 73 65 20 7b 20 72 65 74 75     } else { retu
df70: 72 6e 20 30 20 7d 0a 7d 0a 0a 70 72 6f 63 20 63  rn 0 }.}..proc c
df80: 70 72 6f 6a 65 63 74 3a 3a 43 6f 6d 70 69 6c 65  project::Compile
df90: 46 65 65 64 62 61 63 6b 20 7b 20 66 69 6e 7d 20  Feedback { fin} 
dfa0: 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 63  {.    variable c
dfb0: 6f 6d 70 69 6c 61 74 69 6f 6e 73 74 61 74 75 73  ompilationstatus
dfc0: 0a 0a 20 20 20 20 69 66 20 7b 20 5b 65 6f 66 20  ..    if { [eof 
dfd0: 24 66 69 6e 5d 20 7d 20 7b 0a 09 73 65 74 20 65  $fin] } {..set e
dfe0: 72 72 20 5b 63 61 74 63 68 20 7b 20 63 6c 6f 73  rr [catch { clos
dff0: 65 20 24 66 69 6e 20 7d 20 65 72 72 73 74 72 69  e $fin } errstri
e000: 6e 67 5d 0a 09 69 66 20 7b 20 24 65 72 72 20 7d  ng]..if { $err }
e010: 20 7b 0a 09 20 20 20 20 52 61 6d 44 65 62 75 67   {..    RamDebug
e020: 67 65 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73  ger::TextCompIns
e030: 65 72 74 20 24 65 72 72 73 74 72 69 6e 67 5c 6e  ert $errstring\n
e040: 0a 09 20 20 20 20 73 65 74 20 63 6f 6d 70 69 6c  ..    set compil
e050: 61 74 69 6f 6e 73 74 61 74 75 73 20 31 0a 09 7d  ationstatus 1..}
e060: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74   else {..    set
e070: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 73 74 61 74   compilationstat
e080: 75 73 20 30 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  us 0..}..return.
e090: 20 20 20 20 7d 0a 20 20 20 20 67 65 74 73 20 24      }.    gets $
e0a0: 66 69 6e 20 61 61 0a 0a 20 20 20 20 69 66 20 7b  fin aa..    if {
e0b0: 20 24 61 61 20 21 3d 20 22 22 20 7d 20 7b 0a 09   $aa != "" } {..
e0c0: 52 61 6d 44 65 62 75 67 67 65 72 3a 3a 54 65 78  RamDebugger::Tex
e0d0: 74 43 6f 6d 70 49 6e 73 65 72 74 20 24 61 61 5c  tCompInsert $aa\
e0e0: 6e 0a 09 75 70 64 61 74 65 0a 20 20 20 20 7d 0a  n..update.    }.
e0f0: 7d 0a 0a 70 72 6f 63 20 63 70 72 6f 6a 65 63 74  }..proc cproject
e100: 3a 3a 45 76 61 6c 53 63 72 69 70 74 20 7b 20 77  ::EvalScript { w
e110: 20 64 65 62 72 65 6c 20 73 63 72 69 70 74 74 61   debrel scriptta
e120: 62 20 7b 20 73 68 6f 77 20 30 20 7d 20 7d 20 7b  b { show 0 } } {
e130: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 70 72  .    variable pr
e140: 6f 6a 65 63 74 0a 20 20 20 20 76 61 72 69 61 62  oject.    variab
e150: 6c 65 20 64 61 74 61 53 0a 0a 20 20 20 20 73 65  le dataS..    se
e160: 74 20 73 63 72 69 70 74 20 24 64 61 74 61 53 28  t script $dataS(
e170: 24 64 65 62 72 65 6c 2c 24 73 63 72 69 70 74 74  $debrel,$scriptt
e180: 61 62 2c 73 63 72 69 70 74 29 0a 20 20 20 20 72  ab,script).    r
e190: 65 67 73 75 62 20 2d 61 6c 6c 20 7b 28 3f 6e 29  egsub -all {(?n)
e1a0: 5e 5c 73 2a 5c 23 2e 2a 24 7d 20 24 73 63 72 69  ^\s*\#.*$} $scri
e1b0: 70 74 20 22 22 20 72 65 73 0a 20 20 20 20 69 66  pt "" res.    if
e1c0: 20 7b 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20   { [string trim 
e1d0: 24 72 65 73 5d 20 3d 3d 20 22 22 20 7d 20 7b 0a  $res] == "" } {.
e1e0: 09 69 66 20 7b 20 24 73 68 6f 77 20 7d 20 7b 0a  .if { $show } {.
e1f0: 09 20 20 20 20 57 61 72 6e 57 69 6e 20 22 4e 6f  .    WarnWin "No
e200: 74 68 69 6e 67 20 74 6f 20 65 78 65 63 75 74 65  thing to execute
e210: 20 69 6e 20 53 63 72 69 70 74 20 27 24 73 63 72   in Script '$scr
e220: 69 70 74 74 61 62 27 22 20 24 77 0a 09 7d 0a 09  ipttab'" $w..}..
e230: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
e240: 20 20 73 65 74 20 70 77 64 20 5b 70 77 64 5d 0a    set pwd [pwd].
e250: 20 20 20 20 63 64 20 5b 66 69 6c 65 20 64 69 72      cd [file dir
e260: 6e 61 6d 65 20 24 70 72 6f 6a 65 63 74 5d 0a 0a  name $project]..
e270: 20 20 20 20 73 65 74 20 50 72 6f 6a 65 63 74 44      set ProjectD
e280: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
e290: 20 24 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 73   $project].    s
e2a0: 65 74 20 4f 62 6a 65 63 74 73 44 69 72 20 5b 66  et ObjectsDir [f
e2b0: 69 6c 65 20 74 61 69 6c 20 5b 66 69 6c 65 20 72  ile tail [file r
e2c0: 6f 6f 74 20 24 70 72 6f 6a 65 63 74 5d 5d 5f 24  oot $project]]_$
e2d0: 64 65 62 72 65 6c 0a 0a 20 20 20 20 72 65 6e 61  debrel..    rena
e2e0: 6d 65 20 3a 3a 70 75 74 73 20 3a 3a 5f 5f 5f 70  me ::puts ::___p
e2f0: 75 74 73 0a 20 20 20 20 70 72 6f 63 20 3a 3a 70  uts.    proc ::p
e300: 75 74 73 20 61 72 67 73 20 7b 0a 09 73 65 74 20  uts args {..set 
e310: 61 72 67 73 4e 20 24 61 72 67 73 0a 09 73 65 74  argsN $args..set
e320: 20 68 61 73 6e 65 77 6c 69 6e 65 20 31 0a 09 69   hasnewline 1..i
e330: 66 20 7b 20 5b 6c 69 6e 64 65 78 20 24 61 72 67  f { [lindex $arg
e340: 73 4e 20 30 5d 20 3d 3d 20 22 2d 6e 6f 6e 65 77  sN 0] == "-nonew
e350: 6c 69 6e 65 22 20 7d 20 7b 0a 09 20 20 20 20 73  line" } {..    s
e360: 65 74 20 68 61 73 6e 65 77 6c 69 6e 65 20 30 0a  et hasnewline 0.
e370: 09 20 20 20 20 73 65 74 20 61 72 67 73 4e 20 5b  .    set argsN [
e380: 6c 72 61 6e 67 65 20 24 61 72 67 73 4e 20 31 20  lrange $argsN 1 
e390: 65 6e 64 5d 0a 09 7d 0a 09 73 65 74 20 63 68 61  end]..}..set cha
e3a0: 6e 6e 65 6c 49 64 20 73 74 64 6f 75 74 0a 09 69  nnelId stdout..i
e3b0: 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72  f { [llength $ar
e3c0: 67 73 4e 5d 20 3d 3d 20 32 20 7d 20 7b 0a 09 20  gsN] == 2 } {.. 
e3d0: 20 20 20 73 65 74 20 63 68 61 6e 6e 65 6c 49 64     set channelId
e3e0: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 4e 20   [lindex $argsN 
e3f0: 30 5d 0a 09 20 20 20 20 73 65 74 20 61 72 67 73  0]..    set args
e400: 4e 20 5b 6c 72 61 6e 67 65 20 24 61 72 67 73 4e  N [lrange $argsN
e410: 20 31 20 65 6e 64 5d 0a 09 7d 0a 09 69 66 20 7b   1 end]..}..if {
e420: 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 4e   [llength $argsN
e430: 5d 20 3d 3d 20 31 20 26 26 20 5b 72 65 67 65 78  ] == 1 && [regex
e440: 70 20 7b 73 74 64 6f 75 74 7c 73 74 64 65 72 72  p {stdout|stderr
e450: 7d 20 24 63 68 61 6e 6e 65 6c 49 64 5d 20 7d 20  } $channelId] } 
e460: 7b 0a 09 20 20 20 20 52 61 6d 44 65 62 75 67 67  {..    RamDebugg
e470: 65 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65  er::TextCompInse
e480: 72 74 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73  rt [lindex $args
e490: 4e 20 30 5d 0a 09 20 20 20 20 69 66 20 7b 20 24  N 0]..    if { $
e4a0: 68 61 73 6e 65 77 6c 69 6e 65 20 7d 20 7b 20 52  hasnewline } { R
e4b0: 61 6d 44 65 62 75 67 67 65 72 3a 3a 54 65 78 74  amDebugger::Text
e4c0: 43 6f 6d 70 49 6e 73 65 72 74 20 5c 6e 20 7d 0a  CompInsert \n }.
e4d0: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 75  .} else {..    u
e4e0: 70 6c 65 76 65 6c 20 5f 5f 5f 70 75 74 73 20 24  plevel ___puts $
e4f0: 61 72 67 73 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20  args..}.    }.. 
e500: 20 20 20 73 65 74 20 65 72 72 20 5b 63 61 74 63     set err [catc
e510: 68 20 24 73 63 72 69 70 74 20 65 72 72 73 74 72  h $script errstr
e520: 69 6e 67 5d 0a 0a 20 20 20 20 72 65 6e 61 6d 65  ing]..    rename
e530: 20 3a 3a 70 75 74 73 20 22 22 0a 20 20 20 20 72   ::puts "".    r
e540: 65 6e 61 6d 65 20 3a 3a 5f 5f 5f 70 75 74 73 20  ename ::___puts 
e550: 3a 3a 70 75 74 73 0a 0a 20 20 20 20 69 66 20 7b  ::puts..    if {
e560: 20 24 65 72 72 20 7d 20 7b 0a 09 52 61 6d 44 65   $err } {..RamDe
e570: 62 75 67 67 65 72 3a 3a 54 65 78 74 43 6f 6d 70  bugger::TextComp
e580: 52 61 69 73 65 0a 09 52 61 6d 44 65 62 75 67 67  Raise..RamDebugg
e590: 65 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65  er::TextCompInse
e5a0: 72 74 52 65 64 20 22 2d 2d 2d 2d 2d 45 72 72 6f  rtRed "-----Erro
e5b0: 72 20 65 78 65 63 75 74 69 6e 67 20 73 63 72 69  r executing scri
e5c0: 70 74 20 27 24 73 63 72 69 70 74 74 61 62 27 2d  pt '$scripttab'-
e5d0: 2d 2d 2d 2d 5c 6e 22 0a 09 52 61 6d 44 65 62 75  ----\n"..RamDebu
e5e0: 67 67 65 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e  gger::TextCompIn
e5f0: 73 65 72 74 52 65 64 20 24 3a 3a 65 72 72 6f 72  sertRed $::error
e600: 49 6e 66 6f 5c 6e 0a 09 69 66 20 7b 20 24 73 68  Info\n..if { $sh
e610: 6f 77 20 7d 20 7b 0a 09 20 20 20 20 57 61 72 6e  ow } {..    Warn
e620: 57 69 6e 20 22 65 72 72 6f 72 20 65 78 65 63 75  Win "error execu
e630: 74 69 6e 67 20 73 63 72 69 70 74 20 27 24 73 63  ting script '$sc
e640: 72 69 70 74 74 61 62 27 20 28 24 65 72 72 73 74  ripttab' ($errst
e650: 72 69 6e 67 29 22 20 24 77 0a 09 7d 0a 20 20 20  ring)" $w..}.   
e660: 20 7d 20 65 6c 73 65 20 7b 0a 09 52 61 6d 44 65   } else {..RamDe
e670: 62 75 67 67 65 72 3a 3a 54 65 78 74 43 6f 6d 70  bugger::TextComp
e680: 52 61 69 73 65 0a 09 52 61 6d 44 65 62 75 67 67  Raise..RamDebugg
e690: 65 72 3a 3a 54 65 78 74 43 6f 6d 70 49 6e 73 65  er::TextCompInse
e6a0: 72 74 20 22 45 78 65 63 75 74 65 64 20 73 63 72  rt "Executed scr
e6b0: 69 70 74 20 27 24 73 63 72 69 70 74 74 61 62 27  ipt '$scripttab'
e6c0: 2e 20 52 65 73 75 6c 74 3a 20 5c 6e 24 65 72 72  . Result: \n$err
e6d0: 73 74 72 69 6e 67 5c 6e 22 0a 09 69 66 20 7b 20  string\n"..if { 
e6e0: 24 73 68 6f 77 20 7d 20 7b 0a 09 20 20 20 20 57  $show } {..    W
e6f0: 61 72 6e 57 69 6e 20 22 45 78 65 63 75 74 65 64  arnWin "Executed
e700: 20 73 63 72 69 70 74 20 27 24 73 63 72 69 70 74   script '$script
e710: 74 61 62 27 2e 20 52 65 73 75 6c 74 3a 20 24 65  tab'. Result: $e
e720: 72 72 73 74 72 69 6e 67 22 20 24 77 0a 09 7d 0a  rrstring" $w..}.
e730: 20 20 20 20 7d 0a 20 20 20 20 63 64 20 24 70 77      }.    cd $pw
e740: 64 0a 7d 0a 0a 0a                                d.}...