]> bicyclesonthemoon.info Git - ott/bsta/blobdiff - update.1.pl
include password in empty goto redirect
[ott/bsta] / update.1.pl
index af04ce37b82be0ae84009dcb0796841e0db45f6e..8cfba90fa447128fd0229b08e492037186888b16 100644 (file)
@@ -1,4 +1,4 @@
-###RUN_PERL: #!/usr/bin/perl
+#!/usr/bin/perl
 
 # update.pl is generated from update.1.pl.
 #
@@ -26,17 +26,15 @@ use Encode ('encode', 'decode');
 
 ###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)';
@@ -45,9 +43,13 @@ decode_argv();
 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'}) ? 
@@ -62,6 +64,7 @@ print $time."\n";
 
 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) {
@@ -69,6 +72,7 @@ foreach my $id (@ARGV) {
                }
        }
        elsif ($id =~ /^[0-9]+$/) {
+               $update_goto = 1;
                my $f = int($&);
                if ($f <= $last_frame) {
                        push @list, $f
@@ -87,6 +91,23 @@ foreach my $id (@ARGV) {
        }
 }
 
+# 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(
@@ -97,14 +118,136 @@ foreach my $id (@list) {
                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;