release 1.14pre1
[descalc.git] / 35_unitconv.pm
index 3cf2540540eac540915155a51507410954170f89..a460774023b86fbfde52887c4f1c601805f7f1e2 100644 (file)
@@ -1,5 +1,9 @@
 # unit convertor for DCT, by Shiar
 
+# 1.14.1 200701310504 - exact cd/dvd size
+# 1.14.0 200501261830 - units can have different offsets, so we can convert ^C/^F
+# 1.13.1 200501071420 - added cd/dvd sizes to data storage
+# 1.13.0 200411042100 - changed calls addmenu() and redraw()
 # 1.11.0 200410291000 - use redraw()
 # 1.10.5 200410151900 - data storage units (8 total, including LOC)
 # 1.10.4 200410132300 - hp49 units for mass
@@ -13,14 +17,14 @@ use strict;
 use warnings;
 use utf8;
 
-my $menugroup = addmenu(["main", 0], "unit") if defined &addmenu;
+addmenu("main", "unit");
 
 my %unit;  # unit table (build below)
 my $i = 0;  # unit group counter (temporary)
 do {
        $i++;  # next group
        my $title = shift @$_;  # first element is group title, no unit
-       addmenu(["unit", $menugroup], $title, map "_$_->[0]", @$_) if defined &addmenu;
+       addmenu("unit", $title, map "_$_->[0]", @$_);
        $unit{$_->[0]} = {
                type=>$i, name=>$_->[0], val=>$_->[1], desc=>$_->[2], diff=>$_->[3]
        } for @$_;
@@ -190,6 +194,8 @@ do {
                ['bit', 1/8, "bit/octet"],
                ['Mbit', 1024**2/8, "megabit"],
                ['LOC', 19e12, 'Library of Congress'], # est. 17-20TB
+               ['CD', 359_847*2048, 'max CD-ROM (700MB) data'],
+               ['DVD', 2_295_104*2048, 'max DVD-ROM data'],
        ],
 ); # units table
 
@@ -198,10 +204,10 @@ push @{$hook{precmd}}, sub {
                $_ = $unit{substr $_, 1} or next;
                if (exists $val{unit} and $val{unit}{type}==$_->{type}) {
                        unshift @stack, $val{i} if defined $val{i};
-#                      $stack[0] -= $_->{diff} if $_->{diff};
-#                      $stack[0] += $val{unit}{diff}*$val{unit}{val}/$_->{val} if $val{unit}{diff};
+                       $stack[0] += $val{unit}{diff} if $val{unit}{diff};
                        $stack[0] *= delete($val{unit})->{val} / $_->{val};
-                       redraw(1);
+                       $stack[0] -= $_->{diff} if $_->{diff};
+                       redraw(stack=>1);
                        undef %val;
                } # convert
                else {
@@ -218,6 +224,6 @@ push @{$hook{postentry}}, sub {
 return {
        author  => "Shiar",
        title   => "unit convertor",
-       version => "1.11",
+       version => "1.14.01",
 };