52 lines
1.1 KiB
Tcl
52 lines
1.1 KiB
Tcl
#!/usr/bin/tclsh
|
|
#
|
|
# This script is used to generate the array of strings and the enum
|
|
# that appear at the beginning of the C code implementation of a
|
|
# a TCL command and that define the available subcommands for that
|
|
# TCL command.
|
|
|
|
set prefix {}
|
|
while {![eof stdin]} {
|
|
set line [gets stdin]
|
|
if {$line==""} continue
|
|
regsub -all "\[ \t\n,\]+" [string trim $line] { } line
|
|
foreach token [split $line { }] {
|
|
if {![regexp {(([a-zA-Z]+)_)?([_a-zA-Z]+)} $token all px p2 name]} continue
|
|
lappend namelist [string tolower $name]
|
|
if {$px!=""} {set prefix $p2}
|
|
}
|
|
}
|
|
|
|
puts " static const char *${prefix}_strs\[\] = \173"
|
|
set col 0
|
|
proc put_item x {
|
|
global col
|
|
if {$col==0} {puts -nonewline " "}
|
|
if {$col<2} {
|
|
puts -nonewline [format " %-21s" $x]
|
|
incr col
|
|
} else {
|
|
puts $x
|
|
set col 0
|
|
}
|
|
}
|
|
proc finalize {} {
|
|
global col
|
|
if {$col>0} {puts {}}
|
|
set col 0
|
|
}
|
|
|
|
foreach name [lsort $namelist] {
|
|
put_item \"$name\",
|
|
}
|
|
put_item 0
|
|
finalize
|
|
puts " \175;"
|
|
puts " enum ${prefix}_enum \173"
|
|
foreach name [lsort $namelist] {
|
|
regsub -all {@} $name {} name
|
|
put_item ${prefix}_[string toupper $name],
|
|
}
|
|
finalize
|
|
puts " \175;"
|