Hex Artifact Content

Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.

Artifact 480e6ccdfa1445d1b61012af69ae55c944e1e30f:


0000: 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 20 43 6f  # -*- tcl -*- Co
0010: 70 79 72 69 67 68 74 20 28 63 29 20 32 30 31 32  pyright (c) 2012
0020: 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69 65 73   Andreas Kupries
0030: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
0040: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0050: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
0070: 23 20 53 74 61 6e 64 61 72 64 20 72 65 63 69 70  # Standard recip
0080: 65 73 2e 0a 23 23 20 2d 20 6e 75 6c 6c 20 20 20  es..## - null   
0090: 20 2d 20 6e 6f 20 6f 70 65 72 61 74 69 6f 6e 2e   - no operation.
00a0: 0a 23 23 20 2d 20 72 65 63 69 70 65 73 20 2d 20  .## - recipes - 
00b0: 72 65 63 69 70 65 20 6c 69 73 74 0a 23 23 20 2d  recipe list.## -
00c0: 20 68 65 6c 70 20 20 20 20 2d 20 72 65 63 69 70   help    - recip
00d0: 65 20 68 65 6c 70 0a 23 23 20 2d 20 67 75 69 20  e help.## - gui 
00e0: 20 20 20 20 2d 20 73 74 61 6e 64 61 72 64 20 47      - standard G
00f0: 55 49 20 74 6f 20 72 65 63 69 70 65 73 2e 0a 0a  UI to recipes...
0100: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0110: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0120: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0130: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 6b  #############..k
0140: 65 74 74 6c 65 20 72 65 63 69 70 65 20 64 65 66  ettle recipe def
0150: 69 6e 65 20 6e 75 6c 6c 20 7b 0a 20 20 20 20 4e  ine null {.    N
0160: 6f 20 6f 70 65 72 61 74 69 6f 6e 2e 20 44 65 62  o operation. Deb
0170: 75 67 67 69 6e 67 20 68 65 6c 70 65 72 20 28 75  ugging helper (u
0180: 73 65 20 77 69 74 68 20 2d 74 72 61 63 65 29 2e  se with -trace).
0190: 0a 7d 20 7b 7d 20 7b 7d 0a 0a 6b 65 74 74 6c 65  .} {} {}..kettle
01a0: 20 72 65 63 69 70 65 20 64 65 66 69 6e 65 20 66   recipe define f
01b0: 6f 72 65 76 65 72 20 7b 0a 20 20 20 20 4e 6f 20  orever {.    No 
01c0: 6f 70 65 72 61 74 69 6f 6e 2c 20 69 6e 66 69 6e  operation, infin
01d0: 69 74 65 20 6c 6f 6f 70 2e 20 44 65 62 75 67 67  ite loop. Debugg
01e0: 69 6e 67 20 68 65 6c 70 65 72 20 28 75 73 65 20  ing helper (use 
01f0: 77 69 74 68 20 2d 74 72 61 63 65 29 2e 0a 7d 20  with -trace)..} 
0200: 7b 7d 20 7b 0a 20 20 20 20 66 69 6c 65 20 6d 6b  {} {.    file mk
0210: 64 69 72 20 5b 73 65 74 20 78 20 5b 70 61 74 68  dir [set x [path
0220: 20 74 6d 70 66 69 6c 65 20 78 5d 5d 0a 20 20 20   tmpfile x]].   
0230: 20 70 75 74 73 20 24 78 0a 20 20 20 20 77 68 69   puts $x.    whi
0240: 6c 65 20 7b 31 7d 20 7b 7d 0a 7d 0a 0a 23 20 23  le {1} {}.}..# #
0250: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
0260: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0270: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0280: 23 23 23 23 23 23 23 23 23 23 0a 0a 6b 65 74 74  ##########..kett
0290: 6c 65 20 72 65 63 69 70 65 20 64 65 66 69 6e 65  le recipe define
02a0: 20 6c 69 73 74 2d 72 65 63 69 70 65 73 20 7b 0a   list-recipes {.
02b0: 20 20 20 20 4c 69 73 74 20 61 6c 6c 20 61 76 61      List all ava
02c0: 69 6c 61 62 6c 65 20 72 65 63 69 70 65 73 2c 20  ilable recipes, 
02d0: 77 69 74 68 6f 75 74 20 64 65 74 61 69 6c 73 2e  without details.
02e0: 0a 7d 20 7b 7d 20 7b 0a 20 20 20 20 69 6f 20 70  .} {} {.    io p
02f0: 75 74 73 20 5b 6c 73 6f 72 74 20 2d 64 69 63 74  uts [lsort -dict
0300: 20 5b 72 65 63 69 70 65 20 6e 61 6d 65 73 5d 5d   [recipe names]]
0310: 0a 7d 0a 0a 6b 65 74 74 6c 65 20 72 65 63 69 70  .}..kettle recip
0320: 65 20 64 65 66 69 6e 65 20 68 65 6c 70 2d 72 65  e define help-re
0330: 63 69 70 65 73 20 7b 0a 20 20 20 20 50 72 69 6e  cipes {.    Prin
0340: 74 20 74 68 65 20 68 65 6c 70 2e 0a 7d 20 7b 7d  t the help..} {}
0350: 20 7b 0a 20 20 20 20 72 65 63 69 70 65 20 68 65   {.    recipe he
0360: 6c 70 20 7b 55 73 61 67 65 3a 20 7d 0a 7d 0a 0a  lp {Usage: }.}..
0370: 6b 65 74 74 6c 65 20 72 65 63 69 70 65 20 64 65  kettle recipe de
0380: 66 69 6e 65 20 68 65 6c 70 2d 64 75 6d 70 20 7b  fine help-dump {
0390: 0a 20 20 20 20 50 72 69 6e 74 20 74 68 65 20 68  .    Print the h
03a0: 65 6c 70 20 69 6e 20 54 63 6c 20 66 6f 72 6d 61  elp in Tcl forma
03b0: 74 2e 0a 7d 20 7b 7d 20 7b 0a 20 20 20 20 72 65  t..} {} {.    re
03c0: 63 69 70 65 20 68 65 6c 70 2d 64 75 6d 70 0a 7d  cipe help-dump.}
03d0: 0a 0a 6b 65 74 74 6c 65 20 72 65 63 69 70 65 20  ..kettle recipe 
03e0: 70 61 72 65 6e 74 20 68 65 6c 70 2d 72 65 63 69  parent help-reci
03f0: 70 65 73 20 68 65 6c 70 0a 6b 65 74 74 6c 65 20  pes help.kettle 
0400: 72 65 63 69 70 65 20 70 61 72 65 6e 74 20 6c 69  recipe parent li
0410: 73 74 2d 72 65 63 69 70 65 73 20 6c 69 73 74 0a  st-recipes list.
0420: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
0430: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0440: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a  ##############..
0460: 6b 65 74 74 6c 65 20 72 65 63 69 70 65 20 64 65  kettle recipe de
0470: 66 69 6e 65 20 6c 69 73 74 2d 6f 70 74 69 6f 6e  fine list-option
0480: 73 20 7b 0a 20 20 20 20 4c 69 73 74 20 61 6c 6c  s {.    List all
0490: 20 61 76 61 69 6c 61 62 6c 65 20 6f 70 74 69 6f   available optio
04a0: 6e 73 2c 20 77 69 74 68 6f 75 74 20 64 65 74 61  ns, without deta
04b0: 69 6c 73 2e 0a 7d 20 7b 7d 20 7b 0a 20 20 20 20  ils..} {} {.    
04c0: 69 6f 20 70 75 74 73 20 5b 6c 73 6f 72 74 20 2d  io puts [lsort -
04d0: 64 69 63 74 20 5b 6f 70 74 69 6f 6e 20 6e 61 6d  dict [option nam
04e0: 65 73 5d 5d 0a 7d 0a 0a 6b 65 74 74 6c 65 20 72  es]].}..kettle r
04f0: 65 63 69 70 65 20 64 65 66 69 6e 65 20 68 65 6c  ecipe define hel
0500: 70 2d 6f 70 74 69 6f 6e 73 20 7b 0a 20 20 20 20  p-options {.    
0510: 50 72 69 6e 74 20 74 68 65 20 68 65 6c 70 20 61  Print the help a
0520: 62 6f 75 74 20 6f 70 74 69 6f 6e 73 2e 0a 7d 20  bout options..} 
0530: 7b 7d 20 7b 0a 20 20 20 20 6f 70 74 69 6f 6e 20  {} {.    option 
0540: 68 65 6c 70 0a 7d 0a 0a 6b 65 74 74 6c 65 20 72  help.}..kettle r
0550: 65 63 69 70 65 20 70 61 72 65 6e 74 20 68 65 6c  ecipe parent hel
0560: 70 2d 6f 70 74 69 6f 6e 73 20 68 65 6c 70 0a 6b  p-options help.k
0570: 65 74 74 6c 65 20 72 65 63 69 70 65 20 70 61 72  ettle recipe par
0580: 65 6e 74 20 6c 69 73 74 2d 6f 70 74 69 6f 6e 73  ent list-options
0590: 20 6c 69 73 74 0a 0a 23 20 23 20 23 23 20 23 23   list..# # ## ##
05a0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
05b0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
05c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05d0: 23 23 23 23 0a 0a 6b 65 74 74 6c 65 20 72 65 63  ####..kettle rec
05e0: 69 70 65 20 64 65 66 69 6e 65 20 73 68 6f 77 2d  ipe define show-
05f0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 0a  configuration {.
0600: 20 20 20 20 53 68 6f 77 20 74 68 65 20 73 74 61      Show the sta
0610: 74 65 20 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e  te of the option
0620: 20 64 61 74 61 62 61 73 65 2e 0a 7d 20 7b 7d 20   database..} {} 
0630: 7b 0a 20 20 20 20 73 65 74 20 6e 61 6d 65 73 20  {.    set names 
0640: 5b 6c 73 6f 72 74 20 2d 64 69 63 74 20 5b 6f 70  [lsort -dict [op
0650: 74 69 6f 6e 20 6e 61 6d 65 73 5d 5d 0a 20 20 20  tion names]].   
0660: 20 69 6f 20 70 75 74 73 20 7b 7d 0a 20 20 20 20   io puts {}.    
0670: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61  foreach name $na
0680: 6d 65 73 20 70 61 64 64 65 64 20 5b 73 74 72 75  mes padded [stru
0690: 74 69 6c 20 70 61 64 72 20 24 6e 61 6d 65 73 5d  til padr $names]
06a0: 20 7b 0a 09 73 65 74 20 76 61 6c 75 65 20 5b 6f   {..set value [o
06b0: 70 74 69 6f 6e 20 67 65 74 20 24 6e 61 6d 65 5d  ption get $name]
06c0: 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61  ..if {[string ma
06d0: 74 63 68 20 2a 5c 6e 2a 20 24 76 61 6c 75 65 5d  tch *\n* $value]
06e0: 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 76 61 6c  } {..    set val
06f0: 75 65 20 5c 6e 5b 73 74 72 75 74 69 6c 20 72 65  ue \n[strutil re
0700: 66 6c 6f 77 20 24 76 61 6c 75 65 20 22 5c 74 20  flow $value "\t 
0710: 20 20 20 22 5d 0a 09 7d 0a 20 20 20 20 20 20 20     "]..}.       
0720: 20 69 6f 20 70 75 74 73 20 22 5c 74 24 70 61 64   io puts "\t$pad
0730: 64 65 64 20 3d 20 24 76 61 6c 75 65 22 0a 20 20  ded = $value".  
0740: 20 20 7d 0a 7d 0a 0a 6b 65 74 74 6c 65 20 72 65    }.}..kettle re
0750: 63 69 70 65 20 64 65 66 69 6e 65 20 73 68 6f 77  cipe define show
0760: 2d 73 74 61 74 65 20 7b 0a 20 20 20 20 53 68 6f  -state {.    Sho
0770: 77 20 74 68 65 20 73 74 61 74 65 0a 7d 20 7b 7d  w the state.} {}
0780: 20 7b 0a 20 20 20 20 73 65 74 20 6e 61 6d 65 73   {.    set names
0790: 20 5b 6c 73 6f 72 74 20 2d 64 69 63 74 20 5b 6f   [lsort -dict [o
07a0: 70 74 69 6f 6e 20 6e 61 6d 65 73 20 40 2a 5d 5d  ption names @*]]
07b0: 0a 20 20 20 20 69 6f 20 70 75 74 73 20 7b 7d 0a  .    io puts {}.
07c0: 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
07d0: 20 24 6e 61 6d 65 73 20 70 61 64 64 65 64 20 5b   $names padded [
07e0: 73 74 72 75 74 69 6c 20 70 61 64 72 20 24 6e 61  strutil padr $na
07f0: 6d 65 73 5d 20 7b 0a 09 73 65 74 20 76 61 6c 75  mes] {..set valu
0800: 65 20 5b 6f 70 74 69 6f 6e 20 67 65 74 20 24 6e  e [option get $n
0810: 61 6d 65 5d 0a 09 69 66 20 7b 5b 73 74 72 69 6e  ame]..if {[strin
0820: 67 20 6d 61 74 63 68 20 2a 5c 6e 2a 20 24 76 61  g match *\n* $va
0830: 6c 75 65 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74  lue]} {..    set
0840: 20 76 61 6c 75 65 20 5c 6e 5b 73 74 72 75 74 69   value \n[struti
0850: 6c 20 72 65 66 6c 6f 77 20 24 76 61 6c 75 65 20  l reflow $value 
0860: 22 5c 74 20 20 20 20 22 5d 0a 09 7d 0a 20 20 20  "\t    "]..}.   
0870: 20 20 20 20 20 69 6f 20 70 75 74 73 20 22 5c 74       io puts "\t
0880: 24 70 61 64 64 65 64 20 3d 20 24 76 61 6c 75 65  $padded = $value
0890: 22 0a 20 20 20 20 7d 0a 7d 0a 0a 6b 65 74 74 6c  ".    }.}..kettl
08a0: 65 20 72 65 63 69 70 65 20 70 61 72 65 6e 74 20  e recipe parent 
08b0: 73 68 6f 77 2d 63 6f 6e 66 69 67 75 72 61 74 69  show-configurati
08c0: 6f 6e 20 73 68 6f 77 0a 6b 65 74 74 6c 65 20 72  on show.kettle r
08d0: 65 63 69 70 65 20 70 61 72 65 6e 74 20 73 68 6f  ecipe parent sho
08e0: 77 2d 73 74 61 74 65 20 20 20 20 20 20 20 20 20  w-state         
08f0: 73 68 6f 77 0a 0a 23 20 23 20 23 23 20 23 23 23  show..# # ## ###
0900: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0910: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
0920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0930: 23 23 23 0a 0a 6b 65 74 74 6c 65 20 72 65 63 69  ###..kettle reci
0940: 70 65 20 64 65 66 69 6e 65 20 6d 65 74 61 2d 73  pe define meta-s
0950: 74 61 74 75 73 20 7b 0a 20 20 20 20 53 74 61 74  tatus {.    Stat
0960: 75 73 20 6f 66 20 6d 65 74 61 20 64 61 74 61 20  us of meta data 
0970: 66 6f 72 20 54 63 6c 20 70 61 63 6b 61 67 65 73  for Tcl packages
0980: 20 61 6e 64 20 61 70 70 6c 69 63 61 74 69 6f 6e   and application
0990: 73 2e 0a 7d 20 7b 7d 20 7b 0a 20 20 20 20 6d 65  s..} {} {.    me
09a0: 74 61 20 73 68 6f 77 2d 73 74 61 74 75 73 0a 7d  ta show-status.}
09b0: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
09c0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
09d0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
09e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
09f0: 0a 6b 65 74 74 6c 65 20 72 65 63 69 70 65 20 64  .kettle recipe d
0a00: 65 66 69 6e 65 20 67 75 69 20 7b 0a 20 20 20 20  efine gui {.    
0a10: 47 72 61 70 68 69 63 61 6c 20 69 6e 74 65 72 66  Graphical interf
0a20: 61 63 65 20 74 6f 20 74 68 65 20 73 79 73 74 65  ace to the syste
0a30: 6d 2e 0a 7d 20 7b 7d 20 7b 0a 20 20 20 20 67 75  m..} {} {.    gu
0a40: 69 20 6d 61 6b 65 0a 7d 0a 0a 23 20 23 20 23 23  i make.}..# # ##
0a50: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
0a60: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0a70: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
0a80: 23 23 23 23 23 23 23 0a 72 65 74 75 72 6e 0a     #######.return.