#!/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;"