This script does two things:
Displays the conversion rate
Custom Convert (Convert from different types of Length/Temperature/Volume/Area/Weight) and a custom amount.
Triggered with:
/convertdialog
Right click in a channel window or status window and select Converter
alias convertdialog $iif(!$dialog(Converter), dialog -mied Converter Converter, halt)
menu status,channel {
[Converter]: $iif(!$dialog(Converter), dialog -mied Converter Converter, halt)
}
dialog converter {
title "Converter"
size -1 -1 300 100
text "Converter ~Vaseline28", 1, 90 10 200 20
text "", 2, 10 390 300 20
tab "Options", 3, 10 30 282 60
button "Length", 4, 15 58 50 20
button "Weight", 5, 70 58 50 20
button "Volume", 6, 125 58 50 20
button "Area", 7, 180 58 50 20
button "Temp", 8, 235 58 50 20
box "From", 9, 110 100 80 100
box "To", 10, 195 100 80 100
combo 11, 120 115 58 80
combo 12, 205 115 58 80
edit "Amount", 13, 15 210 120 20, autohs, autovs
button "Convert!", 14, 210 210 60 20
button "", 17, 20 115 30 20
button "", 18, 20 135 30 20
button "", 19, 20 155 30 20
button "", 20, 20 175 30 20
button "", 21, 55 115 30 20
button "", 22, 55 135 30 20
button "", 23, 55 155 30 20
button "", 24, 55 175 30 20
box "Conversion Rates", 25, 110 100 160 100
button "", 27, 125 115 30 20
button "", 28, 155 115 30 20
button "", 29, 185 115 30 20
button "", 30, 215 115 30 20
button "", 31, 140 135 30 20
button "", 32, 170 135 30 20
button "", 33, 200 135 30 20
edit "", 34, 125 165 120 20, autohs, autovs
box "Results", 35, 20 240 250 60
text "From:", 36, 25 255 50 20
text "To:", 37, 25 280 50 20
box "Result:", 38, 130 255 100 35
edit "**", 39, 135 270 80 15, autohs, autovs
text "**", 40, 60 255 30 20
text "**", 41, 60 280 30 20
}
on *:Dialog:Converter:sclick:14: {
if (($did($dname,13).edited == $true) && ($did($dname,13).text isnum) && ($did($dname,12).seltext) && ($did($dname,11).seltext)) {
dialog -s $dname -1 -1 300 315
did -v $dname 35-41 | /did -o $dname 40 1 $did($dname,11).seltext | /did -o $dname 41 1 $did($dname,12).seltext
$iif(%MeasureType == length, did -o $dname 39 1 $convert($did($dname,11).seltext,$did($dname,12).seltext,$did($dname,13).text).length ,)
$iif(%MeasureType == temp, did -o $dname 39 1 $convert($did($dname,11).seltext,$did($dname,12).seltext,$did($dname,13).text).temp ,)
$iif(%MeasureType == weight, did -o $dname 39 1 $convert($did($dname,11).seltext,$did($dname,12).seltext,$did($dname,13).text).weight ,)
$iif(%MeasureType == volume, did -o $dname 39 1 $convert($did($dname,11).seltext,$did($dname,12).seltext,$did($dname,13).text).vol ,)
$iif(%MeasureType == area, did -o $dname 39 1 $convert($did($dname,11).seltext,$did($dname,12).seltext,$did($dname,13).text).area ,)
}
}
on *:Dialog:Converter:sclick:4-8: {
if ($regex($did,/[4-8]/) == 1) {
did -h $dname 25,27-41
did -v $dname 9-14,17-24
dialog -s $dname -1 -1 300 250
did -e $dname 4-8,27-33
did -b $dname $did
set %MeasureType $did($dname,$did).text
$iif($did == 4, set %Measures km m cm mile yard ft in,)
$iif($did == 5, set %Measures ton kg g pnd oz,)
$iif($did == 6, set %Measures L m3 cm3 gal yd3,)
$iif($did == 7, set %Measures A m2 cm2 acre yd2 ft2,)
$iif($did == 8, set %Measures C F Kel,)
dialog -s $dname -1 -1 300 250
var %x 0
while (%x < $numtok(%Measures,32)) {
inc %x
did -o $dname 11,12 %x $gettok(%Measures,%x,32)
}
var %y 0
did -ab $dname 17-24
while (%y < %x) {
inc %y
var %p $calc(16 + %y)
did -ae $dname %p $gettok(%Measures,%y,32)
}
unset %Measures %Convert
}
if ($did == 15) {
dialog -s $dname -1 -1 300 100
}
}
on *:dialog:Converter:sclick:17-24: {
dialog -s $dname -1 -1 300 250
did -b $dname 34 | did -v $dname 25,27-34 | did -h $dname 9-14,35-41 | did -a $dname 25 1 $did($dname,$did).text = | did -r $dname 34
set %MeasureFrom $did($dname,$did).text
$iif($did($dname,4).enabled == $false, set %Measures km m cm mile yard ft in,)
$iif($did($dname,5).enabled == $false, set %Measures ton kg g pnd oz,)
$iif($did($dname,6).enabled == $false, set %Measures L m3 cm3 gal yd3,)
$iif($did($dname,7).enabled == $false, set %Measures A m2 cm2 acre yd2 ft2,)
$iif($did($dname,8).enabled == $false, set %Measures C F Kel,)
var %t $findtok(%Measures,$did($dname,$did).text,32)
set %Measures $deltok(%Measures,%t,32)
var %x 0
while (%x < $numtok(%Measures,32)) {
inc %x
var %p $calc(%x + 26)
did -av $dname %p $gettok(%Measures,%x,32)
}
if (%x < 7) {
while (%x < 7) {
inc %x
var %t $calc(%x + 26)
did -rb $dname %t
}
}
}
on *:dialog:Converter:sclick:27-33: {
var %MeasureTo $did($dname,$did).text
$iif(%MeasureType == length, did -oe $dname 34 1 $convert(%MeasureFrom,%MeasureTo,1).length ,)
$iif(%MeasureType == temp, did -oe $dname 34 1 $convert(%MeasureFrom,%MeasureTo,1).temp ,)
$iif(%MeasureType == weight, did -oe $dname 34 1 $convert(%MeasureFrom,%MeasureTo,1).weight ,)
$iif(%MeasureType == volume, did -oe $dname 34 1 $convert(%MeasureFrom,%MeasureTo,1).vol ,)
$iif(%MeasureType == area, did -oe $dname 34 1 $convert(%MeasureFrom,%MeasureTo,1).area ,)
}
alias convert {
if ($isid) {
if ((!$3) || ($3 !isnum)) { return ( Invalid Parameter $ $+ convert().temp/length ) | halt }
if ($prop == Temp) {
if ($1 == Kel) {
$iif($2 == C,set %Conversions $calc(-273 + $3),)
$iif($2 == F,set %Conversions $calc(-459.4 + $calc(3.6 * $3)),)
}
elseif ($1 == C) {
$iif($2 == Kel,set %Conversions $calc(273 + $3),)
$iif($2 == F,set %Conversions $calc(($3 * 9/5) + 32),)
}
elseif ($1 == F) {
$iif($2 == C,set %Conversions $calc(($3 - 32) * 5/9),)
$iif($2 == Kel,set %Conversions $calc(($3 - 32) * 5/9 + 273.15),)
}
}
if ($prop == Length) {
if ($1 == km) var %x $3
if ($1 == m) var %x $calc($3 * 0.0001)
if ($1 == cm) var %x $calc($3 * 0.000001)
if ($1 == yard) var %x $calc($3 * 0.0009144)
if ($1 == ft) var %x $calc($3 * 0.0003048)
if ($1 == in) var %x $calc(0.0000254 * $3)
if ($1 == mile) var %x $calc($3 * 1.609344)
if ($2 == yard) var %y 1093.6133
if ($2 == ft) var %y 3280.8399
if ($2 == in) var %y 39370.0787
if ($2 == mile) var %y 0.621371192
if ($2 == m) var %y 1000
if ($2 == cm) var %y 100000
if ($2 == km) set %Conversions %x
else set %Conversions $calc(%x * %y)
}
if ($prop == Vol) {
if ($1 == km) var %x $3
if ($1 == m3) var %x $calc($3 * 1000)
if ($1 == cm3) var %x $calc($3 * 0.001)
if ($1 == gal) var %x $calc($3 * 3.785412)
if ($1 == yd3) var %x $calc($3 * 764.5549)
if ($2 == m3) var %y 0.001
if ($2 == cm3) var %y 1000
if ($2 == gal) var %y 0.2641721
if ($2 == yd3) var %y 0.001307951
if ($2 == l) set %Conversions %x
else set %Conversions $calc(%x * %y)
}
if ($prop == Weight) {
if ($1 == ton) var %x $calc($3 / 1000)
if ($1 == kg) var %x $3
if ($1 == g) var %x $calc($3 * 0.001)
if ($1 == lb) var %x $calc($3 * 0.4536)
if ($1 == oz) var %x $calc($3 * 0.02835)
if ($2 == ton) var %y 0.001
if ($2 == g) var %y 1000
if ($2 == lb) var %y 2.205
if ($2 == oz) var %y 35.27
if ($2 == kg) set %Conversions %x
else set %Conversions $calc(%x * %y)
}
if ($prop == Area) {
if ($1 == A) var %x $calc($3 * 100)
if ($1 == m2) var %x $3
if ($1 == cm2) var %x $calc($3 * 0.0001)
if ($1 == acre) var %x $calc($3 * 4046.85642)
if ($1 == yd2) var %x $calc($3 * 0.83612)
if ($1 == ft2) var %c $calc($3 * 0.0929030)
if ($2 == A) var %y 0.01
if ($2 == cm2) var %y 10000
if ($2 == acre) var %y 0.0002471
if ($2 == yd2) var %y 1.1959900
if ($2 == ft2) var %y 10.7639104
if ($2 == m2) set %Conversions %x
else set %Conversions $calc(%x * %y)
}
var %x %Conversions
unset %Conversions
return %x
}
}