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