+ my $today = Julian::Day->new(time);
+
+ # load up any old spots
+ if ($main::dbh) {
+ unless (grep $_ eq 'spot', $main::dbh->show_tables) {
+ dbg('initialising spot tables');
+ my $t = time;
+ my $total;
+ $main::dbh->spot_create_table;
+
+ my $now = Julian::Day->alloc(1995, 0);
+ my $sth = $main::dbh->spot_insert_prepare;
+ while ($now->cmp($today) <= 0) {
+ my $fh = $fp->open($now);
+ if ($fh) {
+# $main::dbh->{RaiseError} = 0;
+ $main::dbh->begin_work;
+ my $count = 0;
+ while (<$fh>) {
+ chomp;
+ my @s = split /\^/;
+ if (@s < 14) {
+ my @a = (Prefix::cty_data($s[1]))[1..3];
+ my @b = (Prefix::cty_data($s[4]))[1..3];
+ push @s, $b[1] if @s < 7;
+ push @s, '' if @s < 8;
+ push @s, @a[0,1], @b[0,1] if @s < 12;
+ push @s, $a[2], $b[2] if @s < 14;
+ }
+ $main::dbh->spot_insert(\@s, $sth);
+ $count++;
+ }
+ $main::dbh->commit;
+ dbg("inserted $count spots from $now->[0] $now->[1]");
+ $fh->close;
+ $total += $count;
+ }
+ $now = $now->add(1);
+ }
+ $main::dbh->begin_work;
+ $main::dbh->spot_add_indexes;
+ $main::dbh->commit;
+# $main::dbh->{RaiseError} = 1;
+ $t = time - $t;
+ my $min = int($t / 60);
+ my $sec = $t % 60;
+ dbg("$total spots converted in $min:$sec");
+ }
+ unless ($main::dbh->has_ipaddr) {
+ $main::dbh->add_ipaddr;
+ dbg("added ipaddr field to spot table");
+ }
+ }
+
+ # initialise the cache if required
+ if ($spotcachedays > 0) {
+ my $t0 = [gettimeofday];
+ $spotcachedays = 2 if $spotcachedays < 2;
+ dbg "Spot::init - reading in $spotcachedays days of spots into cache";
+ for (my $i = 0; $i < $spotcachedays; ++$i) {
+ my $now = $today->sub($i);
+ my $fh = $fp->open($now);
+ if ($fh) {
+ my @in;
+ my $rec;
+ for ($rec = 0; <$fh>; ++$rec) {
+ chomp;
+ my @s = split /\^/;
+ if (@s < 14) {
+ my @a = (Prefix::cty_data($s[1]))[1..3];
+ my @b = (Prefix::cty_data($s[4]))[1..3];
+ push @s, $b[1] if @s < 7;
+ push @s, '' if @s < 8;
+ push @s, @a[0,1], @b[0,1] if @s < 12;
+ push @s, $a[2], $b[2] if @s < 14;
+ }
+ unshift @in, \@s;
+ }
+ $fh->close;
+ dbg("Spot::init read $rec spots from " . _cachek($now));
+ $spotcache{_cachek($now)} = \@in;
+ }
+ $now->add(1);
+ }
+ dbg("Spot::init $spotcachedays files of spots read into cache in " . _diffms($t0) . "mS")
+ }