-###RUN_PERL: #!/usr/bin/perl
+#!/usr/bin/perl
# update.pl is generated from update.1.pl.
#
###PERL_LIB: use lib /botm/lib/bsta
use botm_common (
- 'read_data_file'
);
use bsta_lib (
'STATE',
- 'ong'
+ 'ong',
+ 'write_index', 'write_static_viewer_page', 'write_static_goto',
+ 'read_frame_data', 'read_default', 'read_words_list',
+ 'read_settings', 'read_state'
);
-###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
-###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
-###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
-
binmode STDIN, ':encoding(UTF-8)';
binmode STDOUT, ':encoding(UTF-8)';
binmode STDERR, ':encoding(UTF-8)';
my $time = time();
srand ($time-$$);
-my %settings = read_data_file(DATA_SETTINGS_PATH());
-my %default = read_data_file(DATA_DEFAULT_PATH());
-my %state = read_data_file(DATA_STATE_PATH());
+my %settings = read_settings();
+my %default = read_default();
+my %state = read_state();
+my %all_frame_data = ();
+my %all_words_data = ();
+
+my $update_goto = 0;
my $ong_state = int($state{'state'});
my $last_frame = ($ong_state > STATE->{'inactive'}) ?
foreach my $id (@ARGV) {
if ($id eq 'all') {
+ $update_goto = 1;
push @list, 'i';
push @list, 'c';
for (my $f=0; $f<=$last_frame; $f+=1) {
}
}
elsif ($id =~ /^[0-9]+$/) {
+ $update_goto = 1;
my $f = int($&);
if ($f <= $last_frame) {
push @list, $f
}
}
+# duplicated - before AND after normal pages!
+if ($update_goto) {
+ print 'static GOTO';
+ my $r = write_static_goto(
+ \%state,
+ \%settings,
+ '' # \%goto_list
+ );
+ if ($r) {
+ print " OK\n";
+ }
+ else {
+ print " FAIL\n";
+ $fail += 1;
+ }
+}
+
foreach my $id (@list) {
print "ONG $id\n";
my $r = ong(
1, # print
\%settings,
\%default,
- '', # %frame_data
+ get_frame_data($id),
'' # %goto_list
);
unless ($r) {
$fail += 1;
print "ONG FAIL!\n";
}
+ make_static_pages($id);
}
+
+# duplicated - before AND after normal pages!
+if ($update_goto) {
+ print 'static GOTO';
+ my $r = write_static_goto(
+ \%state,
+ \%settings,
+ '' # \%goto_list
+ );
+ if ($r) {
+ print " OK\n";
+ }
+ else {
+ print " FAIL\n";
+ $fail += 1;
+ }
+}
+
print "\n";
+
+sub get_frame_data {
+ (my $id) = @_;
+
+ unless ($id =~ /^[0-9]+$/) {
+ return '';
+ }
+ my $f = int($id);
+
+ unless (($f >= 0) && ($f <= $last_frame)) {
+ return '';
+ }
+
+ my $r = $all_frame_data{$f};
+ if (ref ($r)) {
+ return $r;
+ }
+
+ my %frame_data = read_frame_data($f);
+ $all_frame_data{$f} = \%frame_data;
+ return \%frame_data;
+}
+
+sub get_words_data {
+ (my $id) = @_;
+
+ unless ($id =~ /^[0-9]+$/) {
+ return '';
+ }
+ my $f = int($id);
+
+ unless (($f >= 0) && ($f <= $last_frame)) {
+ return '';
+ }
+
+ my $r = $all_words_data{$f};
+ if (ref ($r)) {
+ return $r;
+ }
+
+ my %words_data = read_words_list($f, 1);
+ $all_words_data{$f} = \%words_data;
+ return \%words_data;
+}
+
+sub make_static_page {
+ (my $id) = @_;
+ unless ($id =~ /^[0-9]+$/) {
+ return;
+ }
+ my $f = int($id);
+ unless (
+ ($f >= 0) && (
+ ($f < $last_frame) || (
+ ($ong_state >= STATE->{'end'}) &&
+ ($f <= $last_frame)
+ )
+ )
+ ) {
+ return;
+ }
+ my $r;
+
+ if (($f == 0) && ($ong_state > STATE->{'inactive'})) {
+ print 'index';
+ $r = write_index(
+ \%state,
+ \%settings,
+ );
+ print (($r) ? " OK\n" : " FAIL\n");
+ }
+ elsif ($f > 0) {
+ print 'static page '.$f;
+ $r = write_static_viewer_page (
+ $f,
+ \%state,
+ \%settings,
+ \%default,
+ get_frame_data($f),
+ get_frame_data($f-1),
+ get_frame_data($f+1),
+ get_words_data($f)
+ );
+ print (($r) ? " OK\n" : " FAIL\n");
+ }
+}
+
+sub make_static_pages {
+ (my $id) = @_;
+ unless ($id =~ /^[0-9]+$/) {
+ return;
+ }
+ my $f = int($id);
+ unless (($f >= 0) && ($f <= $last_frame)) {
+ return '';
+ }
+
+ make_static_page($f);
+ make_static_page($f-1);
+ make_static_page($f+1);
+ make_static_page($f);
+}
+
exit $fail;