use IO::Handle;
+$debug=1 if @ARGV;
+
open CM, "commodmap" or die $!;
while (<CM>) {
m/^(\S.*\S)\t(\d+)$/ or die;
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;
}
my ($what,$ary,$ix) = @_;
my $got= $ary->[$ix];
return $got if defined $got;
- die "$what $ix ?";
+ warn "$what $ix ?";
}
-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();
+ $ncommods= getint("Buy ncommods");
for ($commodnum=0; $commodnum<$ncommods; $commodnum++) {
- $commodix= getint();
- $offers= getint();
+ $commodix= getint("Buy $commodnum 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),
}
}
}
+
+$r= read STDIN,$b,1;
+STDIN->error and die $!;
+STDIN->eof or die;
+$b and die;