set_units allow scale multiplier
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
5acc5db9e2
commit
4c2a1aa101
|
|
@ -140,26 +140,22 @@ proc set_cmd_units { args } {
|
|||
set_unit_values "distance" -distance "m" keys
|
||||
}
|
||||
|
||||
proc set_unit_values { unit key unit_name key_var } {
|
||||
proc set_unit_values { unit key suffix key_var } {
|
||||
upvar 1 $key_var keys
|
||||
if { [info exists keys($key)] } {
|
||||
set value $keys($key)
|
||||
if { [string equal -nocase $value $unit_name] } {
|
||||
set_cmd_unit_scale $unit 1.0
|
||||
if { [regexp "(10*)?(\[Mkmunpf\])?" $value match mult prefix] } {
|
||||
set arg_suffix [string range $value [string length $match] end]
|
||||
if { ![string match -nocase $arg_suffix $suffix] } {
|
||||
sta_error 501 "unknown unit $unit suffix $arg_suffix."
|
||||
}
|
||||
if { $mult == "" } {
|
||||
set mult 1
|
||||
}
|
||||
set scale [unit_prefix_scale $unit $prefix ]
|
||||
set_cmd_unit_scale $unit $scale
|
||||
} else {
|
||||
set prefix [string index $value 0]
|
||||
set suffix [string range $value 1 end]
|
||||
# unit includes "1" prefix
|
||||
if { [string is digit $prefix] } {
|
||||
set prefix [string index $value 1]
|
||||
set suffix [string range $value 2 end]
|
||||
}
|
||||
if { [string equal -nocase $suffix $unit_name] } {
|
||||
set scale [unit_prefix_scale $unit $prefix]
|
||||
set_cmd_unit_scale $unit $scale
|
||||
} else {
|
||||
sta_error 163 "unknown $unit unit '$suffix'."
|
||||
}
|
||||
sta_error 163 "unknown unit $unit format."
|
||||
}
|
||||
if [info exists keys(-digits)] {
|
||||
set_cmd_unit_digits $unit $keys(-digits)
|
||||
|
|
|
|||
55
tcl/Sdc.tcl
55
tcl/Sdc.tcl
|
|
@ -235,51 +235,40 @@ proc set_units { args } {
|
|||
check_unit "current" -current "A" keys
|
||||
check_unit "power" -power "W" keys
|
||||
check_unit "distance" -distance "m" keys
|
||||
check_unit "power" -power "w" keys
|
||||
}
|
||||
|
||||
proc check_unit { unit key unit_name key_var } {
|
||||
proc check_unit { unit key suffix key_var } {
|
||||
upvar 1 $key_var keys
|
||||
if { [info exists keys($key)] } {
|
||||
set value $keys($key)
|
||||
if { [string equal -nocase $value $unit_name] } {
|
||||
check_unit_scale $unit 1.0
|
||||
if { [regexp "(10*)?(\[Mkmunpf\])?" $value match mult prefix] } {
|
||||
set arg_suffix [string range $value [string length $match] end]
|
||||
if { ![string match -nocase $arg_suffix $suffix] } {
|
||||
sta_error 501 "unknown unit $unit suffix $arg_suffix."
|
||||
}
|
||||
if { $mult == "" } {
|
||||
set mult 1
|
||||
}
|
||||
set scale [unit_prefix_scale $unit $prefix ]
|
||||
check_unit_scale $unit [expr $scale * $mult]
|
||||
} else {
|
||||
set prefix [string index $value 0]
|
||||
set suffix [string range $value 1 end]
|
||||
# unit includes "1" prefix
|
||||
if { [string is digit $prefix] } {
|
||||
set prefix [string index $value 1]
|
||||
set suffix [string range $value 2 end]
|
||||
}
|
||||
if { [string equal -nocase $suffix $unit_name] } {
|
||||
set scale [unit_prefix_scale $unit $prefix]
|
||||
check_unit_scale $unit $scale
|
||||
} else {
|
||||
sta_error 343 "unknown unit $unit '$suffix'."
|
||||
}
|
||||
sta_error 343 "unknown unit $unit format."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc unit_prefix_scale { unit prefix } {
|
||||
if { [string equal $prefix "M"] } {
|
||||
return 1E+6
|
||||
} elseif { [string equal $prefix "k"] } {
|
||||
return 1E+3
|
||||
} elseif { [string equal $prefix "m"] } {
|
||||
return 1E-3
|
||||
} elseif { [string equal $prefix "u"] } {
|
||||
return 1E-6
|
||||
} elseif { [string equal $prefix "n"] } {
|
||||
return 1E-9
|
||||
} elseif { [string equal $prefix "p"] } {
|
||||
return 1E-12
|
||||
} elseif { [string equal $prefix "f"] } {
|
||||
return 1E-15
|
||||
} else {
|
||||
sta_error 344 "unknown $unit prefix '$prefix'."
|
||||
switch -exact -- $prefix {
|
||||
"M" { return 1E+6 }
|
||||
"k" { return 1E+3 }
|
||||
"" { return 1E+0 }
|
||||
"m" { return 1E-3 }
|
||||
"u" { return 1E-6 }
|
||||
"n" { return 1E-9 }
|
||||
"p" { return 1E-12 }
|
||||
"f" { return 1E-15 }
|
||||
}
|
||||
sta_error 344 "unknown $unit prefix '$prefix'."
|
||||
}
|
||||
|
||||
proc check_unit_scale { unit scale } {
|
||||
|
|
|
|||
Loading…
Reference in New Issue