drh | b5a20d3 | 2003-04-23 12:25:23 +0000 | [diff] [blame] | 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;" |