/ Hex Artifact Content
Login

Artifact 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 54 68 69 73 20 73 63 72 69 70 74  .#.# This script
0020: 20 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65   is used to gene
0030: 72 61 74 65 20 74 68 65 20 61 72 72 61 79 20 6f  rate the array o
0040: 66 20 73 74 72 69 6e 67 73 20 61 6e 64 20 74 68  f strings and th
0050: 65 20 65 6e 75 6d 0a 23 20 74 68 61 74 20 61 70  e enum.# that ap
0060: 70 65 61 72 20 61 74 20 74 68 65 20 62 65 67 69  pear at the begi
0070: 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 43 20 63  nning of the C c
0080: 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ode implementati
0090: 6f 6e 20 6f 66 20 61 0a 23 20 61 20 54 43 4c 20  on of a.# a TCL 
00a0: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 61 74  command and that
00b0: 20 64 65 66 69 6e 65 20 74 68 65 20 61 76 61 69   define the avai
00c0: 6c 61 62 6c 65 20 73 75 62 63 6f 6d 6d 61 6e 64  lable subcommand
00d0: 73 20 66 6f 72 20 74 68 61 74 0a 23 20 54 43 4c  s for that.# TCL
00e0: 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 73 65 74 20 70   command...set p
00f0: 72 65 66 69 78 20 7b 7d 0a 77 68 69 6c 65 20 7b  refix {}.while {
0100: 21 5b 65 6f 66 20 73 74 64 69 6e 5d 7d 20 7b 0a  ![eof stdin]} {.
0110: 20 20 73 65 74 20 6c 69 6e 65 20 5b 67 65 74 73    set line [gets
0120: 20 73 74 64 69 6e 5d 0a 20 20 69 66 20 7b 24 6c   stdin].  if {$l
0130: 69 6e 65 3d 3d 22 22 7d 20 63 6f 6e 74 69 6e 75  ine==""} continu
0140: 65 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  e.  regsub -all 
0150: 22 5c 5b 20 5c 74 5c 6e 2c 5c 5d 2b 22 20 5b 73  "\[ \t\n,\]+" [s
0160: 74 72 69 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65  tring trim $line
0170: 5d 20 7b 20 7d 20 6c 69 6e 65 0a 20 20 66 6f 72  ] { } line.  for
0180: 65 61 63 68 20 74 6f 6b 65 6e 20 5b 73 70 6c 69  each token [spli
0190: 74 20 24 6c 69 6e 65 20 7b 20 7d 5d 20 7b 0a 20  t $line { }] {. 
01a0: 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20     if {![regexp 
01b0: 7b 28 28 5b 61 2d 7a 41 2d 5a 5d 2b 29 5f 29 3f  {(([a-zA-Z]+)_)?
01c0: 28 5b 5f 61 2d 7a 41 2d 5a 30 2d 39 5d 2b 29 7d  ([_a-zA-Z0-9]+)}
01d0: 20 24 74 6f 6b 65 6e 20 61 6c 6c 20 70 78 20 70   $token all px p
01e0: 32 20 6e 61 6d 65 5d 7d 20 63 6f 6e 74 69 6e 75  2 name]} continu
01f0: 65 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6e 61  e.    lappend na
0200: 6d 65 6c 69 73 74 20 5b 73 74 72 69 6e 67 20 74  melist [string t
0210: 6f 6c 6f 77 65 72 20 24 6e 61 6d 65 5d 0a 20 20  olower $name].  
0220: 20 20 69 66 20 7b 24 70 78 21 3d 22 22 7d 20 7b    if {$px!=""} {
0230: 73 65 74 20 70 72 65 66 69 78 20 24 70 32 7d 0a  set prefix $p2}.
0240: 20 20 7d 0a 7d 0a 0a 70 75 74 73 20 22 20 20 73    }.}..puts "  s
0250: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
0260: 20 2a 24 7b 70 72 65 66 69 78 7d 5f 73 74 72 73   *${prefix}_strs
0270: 5c 5b 5c 5d 20 3d 20 5c 31 37 33 22 0a 73 65 74  \[\] = \173".set
0280: 20 63 6f 6c 20 30 0a 70 72 6f 63 20 70 75 74 5f   col 0.proc put_
0290: 69 74 65 6d 20 78 20 7b 0a 20 20 67 6c 6f 62 61  item x {.  globa
02a0: 6c 20 63 6f 6c 0a 20 20 69 66 20 7b 24 63 6f 6c  l col.  if {$col
02b0: 3d 3d 30 7d 20 7b 70 75 74 73 20 2d 6e 6f 6e 65  ==0} {puts -none
02c0: 77 6c 69 6e 65 20 22 20 20 20 22 7d 0a 20 20 69  wline "   "}.  i
02d0: 66 20 7b 24 63 6f 6c 3c 32 7d 20 7b 0a 20 20 20  f {$col<2} {.   
02e0: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
02f0: 20 5b 66 6f 72 6d 61 74 20 22 20 25 2d 32 35 73   [format " %-25s
0300: 22 20 24 78 5d 0a 20 20 20 20 69 6e 63 72 20 63  " $x].    incr c
0310: 6f 6c 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  ol.  } else {.  
0320: 20 20 70 75 74 73 20 24 78 0a 20 20 20 20 73 65    puts $x.    se
0330: 74 20 63 6f 6c 20 30 0a 20 20 7d 0a 7d 0a 70 72  t col 0.  }.}.pr
0340: 6f 63 20 66 69 6e 61 6c 69 7a 65 20 7b 7d 20 7b  oc finalize {} {
0350: 0a 20 20 67 6c 6f 62 61 6c 20 63 6f 6c 0a 20 20  .  global col.  
0360: 69 66 20 7b 24 63 6f 6c 3e 30 7d 20 7b 70 75 74  if {$col>0} {put
0370: 73 20 7b 7d 7d 0a 20 20 73 65 74 20 63 6f 6c 20  s {}}.  set col 
0380: 30 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 6e 61 6d  0.}..foreach nam
0390: 65 20 5b 6c 73 6f 72 74 20 24 6e 61 6d 65 6c 69  e [lsort $nameli
03a0: 73 74 5d 20 7b 0a 20 20 70 75 74 5f 69 74 65 6d  st] {.  put_item
03b0: 20 5c 22 24 6e 61 6d 65 5c 22 2c 0a 7d 0a 70 75   \"$name\",.}.pu
03c0: 74 5f 69 74 65 6d 20 30 0a 66 69 6e 61 6c 69 7a  t_item 0.finaliz
03d0: 65 0a 70 75 74 73 20 22 20 20 5c 31 37 35 3b 22  e.puts "  \175;"
03e0: 0a 70 75 74 73 20 22 20 20 65 6e 75 6d 20 24 7b  .puts "  enum ${
03f0: 70 72 65 66 69 78 7d 5f 65 6e 75 6d 20 5c 31 37  prefix}_enum \17
0400: 33 22 0a 66 6f 72 65 61 63 68 20 6e 61 6d 65 20  3".foreach name 
0410: 5b 6c 73 6f 72 74 20 24 6e 61 6d 65 6c 69 73 74  [lsort $namelist
0420: 5d 20 7b 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  ] {.  regsub -al
0430: 6c 20 7b 40 7d 20 24 6e 61 6d 65 20 7b 7d 20 6e  l {@} $name {} n
0440: 61 6d 65 0a 20 20 70 75 74 5f 69 74 65 6d 20 24  ame.  put_item $
0450: 7b 70 72 65 66 69 78 7d 5f 5b 73 74 72 69 6e 67  {prefix}_[string
0460: 20 74 6f 75 70 70 65 72 20 24 6e 61 6d 65 5d 2c   toupper $name],
0470: 0a 7d 0a 66 69 6e 61 6c 69 7a 65 0a 70 75 74 73  .}.finalize.puts
0480: 20 22 20 20 5c 31 37 35 3b 22 0a                  "  \175;".