1#!/usr/bin/tclsh
2#
3# This script is used to generate the array of strings and the enum
4# that appear at the beginning of the C code implementation of a
5# a TCL command and that define the available subcommands for that
6# TCL command.
7
8set prefix {}
9while {![eof stdin]} {
10  set line [gets stdin]
11  if {$line==""} continue
12  regsub -all "\[ \t\n,\]+" [string trim $line] { } line
13  foreach token [split $line { }] {
14    if {![regexp {(([a-zA-Z]+)_)?([_a-zA-Z]+)} $token all px p2 name]} continue
15    lappend namelist [string tolower $name]
16    if {$px!=""} {set prefix $p2}
17  }
18}
19
20puts "  static const char *${prefix}_strs\[\] = \173"
21set col 0
22proc put_item x {
23  global col
24  if {$col==0} {puts -nonewline "   "}
25  if {$col<2} {
26    puts -nonewline [format " %-21s" $x]
27    incr col
28  } else {
29    puts $x
30    set col 0
31  }
32}
33proc finalize {} {
34  global col
35  if {$col>0} {puts {}}
36  set col 0
37}
38
39foreach name [lsort $namelist] {
40  put_item \"$name\",
41}
42put_item 0
43finalize
44puts "  \175;"
45puts "  enum ${prefix}_enum \173"
46foreach name [lsort $namelist] {
47  regsub -all {@} $name {} name
48  put_item ${prefix}_[string toupper $name],
49}
50finalize
51puts "  \175;"
52