2 use strict qw(refs vars);
5 foreach my $ab (qw(0 1)) {
6 open F, "zcat $ARGV[$ab] |" or die $!;
9 my @l= split /\t/, $_, -1;
11 if ($bs) { @l= ($l[0],$l[1],$l[4],$l[5]); }
12 next unless length $l[2];
13 $l[3]='1001' if $l[3] eq '>1000';
14 my $k= sprintf "%-31s\t%-23s", $l[1], $l[0];
16 $s{$k}[$ab*2+1]= $l[3];
27 while ($val || !length($res)) {
28 # allowing empty strings, reusing "0" for 62, doing base63,
31 $val= ($val-$dig) / 62;
32 $res = chr($dig + ($dig<10 ? 48 :
34 $dig<62 ? 65-36 : die $dig)) . $res;
41 my $me= $commodmap{$cname}; return $me if defined $me;
42 my $val= $nextcommod++;
43 $commodmap{$cname}= $val;
44 # printf "%s:%s\n", $res,$cname;
50 foreach my $k (sort keys %s) {
53 my ($stall,$commod) = ($`,$');
59 if ($stall ne $laststall) {
60 printf "\"%s\n", $stall;
63 print alencodenum(findcommod($commod));
66 if (!defined($r[2])) {
68 printf "\n"; # no "-" here saves 3.5%
71 # base62-encoding all these numbers saves about 8%
72 my $qtydiff= $r[2] - ($r[0] || 0);
73 if (!defined($r[0]) || $r[0] != $r[2]) {
75 printf "\@%s",alencodenum($r[2]);
79 printf "+%s",alencodenum($qtydiff);
80 } elsif ($qtydiff<0) {
82 printf "-%s",alencodenum(-$qtydiff);