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:
8: set prefix {}
9: while {![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:
20: puts " static const char *${prefix}_strs\[\] = \173"
21: set col 0
22: proc 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: }
33: proc finalize {} {
34: global col
35: if {$col>0} {puts {}}
36: set col 0
37: }
38:
39: foreach name [lsort $namelist] {
40: put_item \"$name\",
41: }
42: put_item 0
43: finalize
44: puts " \175;"
45: puts " enum ${prefix}_enum \173"
46: foreach name [lsort $namelist] {
47: regsub -all {@} $name {} name
48: put_item ${prefix}_[string toupper $name],
49: }
50: finalize
51: puts " \175;"
52:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>