You are on page 1of 2

#!/usr/bin/tclsh set fd [open "avp-enum-3gpp-gx.

txt"] while { [gets $fd line] >= 0 } { if { [string length $line] <= 0 \ || [string index $line 0] eq " " \ || [string index $line 0] eq "\t" \ } { continue } if { [string range $line 0 3] eq "5.3." } { gets $fd nextline set ret [regexp {([^ ]+) AVP \(AVP [cC]ode ([0-9]+)(?:[ ])*\) is of type (?: of )*([0-9a-zA-Z]+)[,. ]} $nextline dummy name code type] set code2type($code) $type set code2name($code) $name if { $type eq "Enumerated" } { set avp($code) $name } } else { if { [info exists type] && $type eq "Enumerated" } { set ret [regexp {([^ ]+) \(([0-9]+)\)} $line dummy str num] if { $ret > 0 } { set ${code}($num) $str } } } } puts "# num2str" foreach code [lsort -integer [array names avp]] { set name $avp($code) puts "$code {" puts " # $name" puts " switch \$num {" foreach num [lsort -integer [array names $code]] { eval set str \$${code}($num) puts [format "%8s%-8u{ return %s }" "" $num "\"$str\""] } puts " }" puts "}" } puts "# str2num" foreach code [lsort -integer [array names avp]] { set name $avp($code) puts "$code {" puts " # $name" puts " switch \$str {" set maxlen1 0 set maxlen2 0 foreach num [lsort -integer [array names $code]] { eval set str \$${code}($num) set len1 [expr [string length $str] + 3] if { $len1 > $maxlen1 } { set maxlen1 $len1 } set len2 [string length $num] if { $len2 > $maxlen2 } { set maxlen2 $len2 } } set maxlen1 [ expr (($maxlen1+3)/4)*4]

foreach num [lsort -integer [array names $code]] { eval set str \$${code}($num) puts [format "%8s%-${maxlen1}s{ return %${maxlen2}u }" "" "\"$str\"" $nu m] } puts " }" puts "}" }

You might also like