chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.main.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of chiark:/home/ijackson/things/ypp-sc-tools
[ypp-sc-tools.main.git]
/
pctb
/
yppsc-decode-marketdata
diff --git
a/pctb/yppsc-decode-marketdata
b/pctb/yppsc-decode-marketdata
index b0935894576f1f4a6f7ca95564fd9f37fa5845aa..d798aad03a1e8de8bc274e5de9837c5635801848 100755
(executable)
--- a/
pctb/yppsc-decode-marketdata
+++ b/
pctb/yppsc-decode-marketdata
@@
-3,6
+3,9
@@
use IO::Handle;
open CM, "#commodmap#.tsv" or die $!;
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;
while (<CM>) {
m/^(\S.*\S)\t(\d+)$/ or die;
$commodmap[$2]= $1;
@@
-17,20
+20,25
@@
die $! if CM->error;
T Tailor
W Weaving);
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;
$!=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;
}
return $l;
}
-sub getint() {
+sub getint ($) {
+ my ($w)= @_;
my $b;
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;
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;
}
return $v;
}
@@
-42,12
+50,12
@@
sub inmap($\@$) {
}
}
-printf "# Version: \"%s\"\n", getline();
-$nstalls= getline()+0;
+printf "# Version: \"%s\"\n", getline(
"version"
);
+$nstalls= getline(
"nstalls"
)+0;
while (@stalls < $nstalls) {
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;
$kind= $1;
$sk= $stallkinds{$kind};
die "kind $kind in $_ ?" unless defined $sk;
@@
-60,14
+68,15
@@
unshift @stalls, undef;
$|=1;
foreach $bs qw(Buy Sell) {
$|=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++) {
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("%s\t%s\t%s",
$bs,
inmap('commod',@commodmap,$commodix),
@@
-76,6
+85,13
@@
foreach $bs qw(Buy Sell) {
printf("\t%d\t%d", $price, $qty) or die $!;
if ($bs eq 'Buy') { print "\t\t" or die $!; }
print "\n" or die $!;
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;