Home | History | Annotate | Download | only in tool
      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