chiark / gitweb /
Merge branch 'ijackson'
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Fri, 21 Aug 2009 22:50:06 +0000 (23:50 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Fri, 21 Aug 2009 22:50:06 +0000 (23:50 +0100)
yarrg/Commods.pm
yarrg/database-info-fetch
yarrg/db-idempotent-populate
yarrg/master-info.txt

index c82fdfdbb156a0c3daebd1f4ce6d7e4fe0f36f83..13f581241fa1bd770e166e7e1cf4e581e36c473c 100644 (file)
@@ -49,13 +49,17 @@ BEGIN {
 }
 
 our %oceans; # eg $oceans{'Midnight'}{'Ruby'}{'Eta Island'}= $sources;
-our %commods; # eg $commods{'Fine black cloth'}= $sources;
 our %clients; # eg $clients{'ypp-sc-tools'}= [ qw(last-page) ];
 our %routes; # eg $routes{'Midnight'}{'Orca'}{'Tinga'}= $sources  NB abbrevs!
 our %route_mysteries; # eg $route_mysteries{'Midnight'}{'Norse'}= 3
 # $sources = 's[l]b';
 #       's' = Special Circumstances; 'l' = local ; B = with Bleach
 
+our %commods;
+# eg $commods{'Fine black cloth'}{Srcs}= $sources;
+# eg $commods{'Fine black cloth'}{Mass}= 700 [g]
+# eg $commods{'Fine black cloth'}{Volume}= 1000 [ml]
+
 our (%pctb_commodmap,@pctb_commodmap);
 
 my %colours; # eg $colours{'c'}{'black'}= $sources
@@ -116,10 +120,30 @@ sub parse_info1 ($$) {
     $ca= sub {
        my ($s,$ss) = @_;
 #print "ca($s)\n";
-       if ($s !~ m/\%(\w+)/) { $commods{ucfirst $s} .= $ss; return; }
+       if ($s !~ m/\%(\w+)/) {
+           my ($name, $props) = $s =~
+               /^(\S[^\t]*\S)\t+(\S[^\t]*\S)$/
+               or die "bad commodspec $s";
+           my $ucname= ucfirst $name;
+           $commods{$ucname}{Srcs} .= $ss;
+           my $c= $commods{$ucname};
+           $c->{Volume}= 1000;
+           foreach my $prop (split /\s+/, $props) {
+               if ($prop =~ m/^([1-9]\d*)(k?)g$/) {
+                   $c->{Mass}= $1 * ($2 ? 1000 : 1);
+               } elsif ($prop =~m/^([1-9]\d*)l$/) {
+                   $c->{Volume}= $1 * 1000;
+               } else {
+                   die "unknown property $prop for $ucname";
+               }
+           }
+           die "no mass for $ucname" unless defined $c->{Mass};
+           return;
+       }
        die "unknown $&" unless defined $colours{$1};
-       foreach my $c (keys %{ $colours{$1} }) {
-           &$ca($`.$c.$', $ss .'%'. $colours{$1}{$c});
+       my ($lhs,$pctlet,$rhs)= ($`,$1,$');
+       foreach my $c (keys %{ $colours{$pctlet} }) {
+           &$ca($lhs.$c.$rhs, $ss .'%'. $colours{$pctlet}{$c});
        }
     };
     foreach (@rawcm) { &$ca($_,$src); }
@@ -196,7 +220,7 @@ sub parse_info_serverside_ocean ($) {
 
 sub parse_pctb_commodmap () {
     undef %pctb_commodmap;
-    foreach my $commod (keys %commods) { $commods{$commod} =~ s/b//; }
+    foreach my $commod (keys %commods) { $commods{$commod}{Srcs} =~ s/b//; }
 
     my $c= new IO::File '_commodmap.tsv';
     if (!$c) { $!==&ENOENT or die $!; return 0; }
@@ -205,7 +229,7 @@ sub parse_pctb_commodmap () {
        m/^(\S.*\S)\t(\d+)\n$/ or die "$_";
        die if defined $pctb_commodmap{$1};  $pctb_commodmap{$1}= $2;
        die if defined $pctb_commodmap[$2];  $pctb_commodmap[$2]= $1;
-       $commods{$1} .= 'b';
+       $commods{$1}{Srcs} .= 'b';
     }
     $c->error and die $!;
     close $c or die $!;
index 1e789b88fcb389686675f07393e1d0fab7a48ac1..5e0576095a0b23ac7aa837a1d91ff72132f0c3c2 100755 (executable)
@@ -159,7 +159,7 @@ sub main__comparesources () {
                sub { });
     for_commods(sub {
                    my ($commod)= @_;
-                   my $srcs= $commods{$commod};
+                   my $srcs= $commods{$commod}{Srcs};
                    compare_sources_one($srcs, "commodity $commod");
                });
 }
index 96df020f842de9ab78e0e59035f7ab5122313db3..80ded466aefeb4ab89899fae5218dd7da2537e72 100755 (executable)
@@ -103,12 +103,26 @@ $dbh->commit;
 #---------- commodity list ----------
 
 {
-    my $sth= $dbh->prepare(<<'END')
- INSERT OR IGNORE INTO commods (commodname) VALUES (?);
+    my $insert= $dbh->prepare(<<'END')
+ INSERT OR IGNORE INTO commods
+     (unitmass,
+      unitvolume,
+      commodname)
+     VALUES (?,?,?);
+END
+    ;
+    my $update= $dbh->prepare(<<'END')
+ UPDATE commods
+     SET unitmass = ?,
+         unitvolume = ?
+     WHERE commodname = ?
 END
     ;
     foreach my $commod (sort keys %commods) {
-       $sth->execute($commod);
+       my $c= $commods{$commod};
+       my @qa= ($c->{Mass}, $c->{Volume}, $commod);
+       $insert->execute(@qa);
+       $update->execute(@qa);
     }
     $dbh->commit;
 }
index eb8d66629a89d015b5313a47884021402a7d80fb..312e81c820652375b529136834c0a2adb5903e51 100644 (file)
@@ -1,13 +1,13 @@
 
 commods
- %c dye
- %c enamel
- %c paint
+ kraken's blood                1kg
+ %c dye                        1kg
+ %c enamel             5kg
+ %c paint              1200g 1l
 
- %c cloth
- fine %c cloth
-
- %g gems
+ %c cloth              700g
+ fine %c cloth         700g
+ sail cloth            700g
 
 %c
  aqua
@@ -38,6 +38,17 @@ commods
  white
  yellow
 
+commods
+ %g gems               10kg
+ diamonds              10kg
+ emeralds              10kg
+ moonstones            10kg
+ opals                 10kg
+ pearls                        10kg
+ rubies                        10kg
+ sapphires             10kg
+ topazes               10kg
+
 %g
  amber
  amethyst
@@ -51,67 +62,62 @@ commods
  tigereye
 
 commods
- bananas
- broom flower
- butterfly weed
- carambolas
- chalcocite
- coconuts
- cowslip
- cubanite
- diamonds
- durians
- elderberries
- emeralds
- fine rum
- gold nuggets
- gold ore
- grog
- hemp
- hemp oil
- indigo
- iris root
- iron
- kraken's blood
- lacquer
- large cannon balls
- leushite
- lily of the valley
- limes
- lobelia
- lorandite
- madder
- mangos
- masuyite
- medium cannon balls
- moonstones
- nettle
- old man's beard
- opals
- papagoite
- passion fruit
- pearls
- pineapples
- pokeweed berries
- pomegranates
- rambutan
- rubies
- sail cloth
- sapphires
- sassafras
- serandite
- sincosite
- small cannon balls
- stone
- sugar cane
- swill
- tellurium
- thorianite
- topazes
- varnish
- weld
- wood
- yarrow
+ swill                 1kg
+ grog                  1kg
+ fine rum              1kg
+
+ broom flower          200g
+ butterfly weed                100g
+ cowslip               700g
+ elderberries          700g
+ indigo                        700g
+ iris root             300g
+ lily of the valley    300g
+ lobelia               200g
+ madder                        400g
+ nettle                        300g
+ old man's beard       800g
+ pokeweed berries      300g
+ sassafras             500g
+ weld                  300g
+ yarrow                        200g
+
+ bananas               125kg 100l
+ coconuts              125kg 100l
+ limes                 125kg 100l
+ mangos                        125kg 100l
+ pineapples            125kg 100l
+
+ carambolas            125kg 100l
+ durians               125kg 100l
+ passion fruit         125kg 100l
+ pomegranates          125kg 100l
+ rambutan              125kg 100l
+
+ chalcocite            5700g
+ cubanite              4700g
+ gold nuggets          400g
+ leushite              4400g
+ lorandite             5500g
+ masuyite              5100g
+ papagoite             3300g
+ serandite             3400g
+ sincosite             3000g
+ tellurium             6200g
+ thorianite            100g
+
+ small cannon balls    7100g
+ medium cannon balls   14200g 2l
+ large cannon balls    21300g 3l
+
+ hemp                  125kg 250l
+ hemp oil              1kg
+ iron                  7800g
+ lacquer               1kg
+ stone                 2600g
+ sugar cane            50kg 100l
+ varnish               1kg
+ wood                  175kg 250l
 
 ocean Midnight
  Coral