use IO::Handle;
open CM, "#commodmap#.tsv" or die $!;
+
+$debug=1 if @ARGV;
+
while (<CM>) {
m/^(\S.*\S)\t(\d+)$/ or die;
$commodmap[$2]= $1;
T Tailor
W Weaving);
-sub getline() {
+sub getline ($) {
+ my ($w)= @_;
$!=0; my $l= <STDIN>; die $! unless defined $l;
die $! if STDIN->error;
die unless chomp $l;
-#print STDERR "GOT LINE [$l]\n";
+ print "GOT FOR $w LINE [$l]\n"
+ if $debug;
return $l;
}
-sub getint() {
+sub getint ($) {
+ my ($w)= @_;
my $b;
+ my $t= tell STDIN; $t>=0 or die $!;
my $r= read STDIN,$b,2; die $! if STDIN->error;
die unless $r==2;
my $v= scalar unpack "v", $b;
-#printf STDERR "GOT INT %d 0x%x\n", $v, $v;
+ printf "GOT AT 0x%x INT FOR %s VALUE %d 0x%x\n", $t, $w, $v, $v
+ if $debug;
return $v;
}
}
-printf "# Version: \"%s\"\n", getline();
-$nstalls= getline()+0;
+printf "# Version: \"%s\"\n", getline("version");
+$nstalls= getline("nstalls")+0;
while (@stalls < $nstalls) {
- $_= getline();
- if (s/\^[A-Z]$//) {
+ $_= getline("stall name ".(@stalls+1));
+ if (s/\^([A-Z])$//) {
$kind= $1;
$sk= $stallkinds{$kind};
die "kind $kind in $_ ?" unless defined $sk;
$|=1;
foreach $bs qw(Buy Sell) {
- $ncommods= getint();
- for ($commodnum=0; $commodnum<$ncommods; $commodnum++) {
- $commodix= getint();
- $offers= getint();
+ $alloffers_want= getint("Buy ncommods");
+ $alloffers_done=0;
+ while ($alloffers_done < $alloffers_want) {
+ $commodix= getint("Buy $alloffers_done/$alloffers_want commodix");
+ $offers= getint("Buy $commodnum offers");
for ($offernum=0; $offernum<$offers; $offernum++) {
- $stallix= getint();
- $price= getint();
- $qty= getint();
+ $stallix= getint("Buy $commodnum $offernum stallix");
+ $price= getint("Buy $commodnum $offernum price");
+ $qty= getint("Buy $commodnum $offernum qty");
printf("%s\t%s\t%s",
$bs,
inmap('commod',@commodmap,$commodix),
printf("\t%d\t%d", $price, $qty) or die $!;
if ($bs eq 'Buy') { print "\t\t" or die $!; }
print "\n" or die $!;
+ $alloffers_done++;
+ die if $alloffers_done > $alloffers_want;
}
}
}
+
+$r= read STDIN,$b,1;
+STDIN->error and die $!;
+STDIN->eof or die;
+$b and die;