]> bicyclesonthemoon.info Git - ott/bsta/blobdiff - update.1.pl
input validation; goto form; show version; 2 words password
[ott/bsta] / update.1.pl
index fb6766cb5985047f79f8dab4b8235ad257d60594..8cfba90fa447128fd0229b08e492037186888b16 100644 (file)
@@ -1,4 +1,4 @@
-###RUN_PERL: #!/usr/bin/perl
+#!/usr/bin/perl
 
 # update.pl is generated from update.1.pl.
 #
@@ -26,23 +26,15 @@ use Encode ('encode', 'decode');
 
 ###PERL_LIB: use lib /botm/lib/bsta
 use botm_common (
-       'read_data_file',
-       'join_path'
 );
 use bsta_lib (
        'STATE',
        'ong',
-       'write_index', 'write_static_viewer_page'
+       'write_index', 'write_static_viewer_page', 'write_static_goto',
+       'read_frame_data', 'read_default', 'read_words_list',
+       'read_settings', 'read_state'
 );
 
-###PERL_PATH_SEPARATOR:     PATH_SEPARATOR     = /
-
-###PERL_DATA_PATH:          DATA_PATH          = /botm/data/bsta/
-###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
-###PERL_DATA_WORDS_PATH:    DATA_WORDS_PATH    = /botm/data/bsta/words/
-
 binmode STDIN,  ':encoding(UTF-8)';
 binmode STDOUT, ':encoding(UTF-8)';
 binmode STDERR, ':encoding(UTF-8)';
@@ -51,12 +43,14 @@ 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'}) ? 
        int($state{'last'}) :
@@ -70,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) {
@@ -77,6 +72,7 @@ foreach my $id (@ARGV) {
                }
        }
        elsif ($id =~ /^[0-9]+$/) {
+               $update_goto = 1;
                my $f = int($&);
                if ($f <= $last_frame) {
                        push @list, $f
@@ -95,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(
@@ -114,6 +127,24 @@ foreach my $id (@list) {
        }
        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";
 
 
@@ -134,9 +165,7 @@ sub get_frame_data {
                return $r;
        }
        
-       my %frame_data = read_data_file(
-               join_path(PATH_SEPARATOR(), DATA_PATH(), $f)
-       );
+       my %frame_data = read_frame_data($f);
        $all_frame_data{$f} = \%frame_data;
        return \%frame_data;
 }
@@ -158,15 +187,9 @@ sub get_words_data {
                return $r;
        }
        
-       my %frame_data = read_data_file(
-               join_path(PATH_SEPARATOR(), DATA_WORDS_PATH(), $f),
-               '', # encoding,
-               0,  # no header
-               1,  # header only
-               1,  # as list; not relevant
-       );
-       $all_words_data{$f} = \%frame_data;
-       return \%frame_data;
+       my %words_data = read_words_list($f, 1);
+       $all_words_data{$f} = \%words_data;
+       return \%words_data;
 }
 
 sub make_static_page {
@@ -175,7 +198,14 @@ sub make_static_page {
                return;
        }
        my $f = int($id);
-       unless (($f >= 0) && ($f <= $last_frame)) {
+       unless (
+               ($f >= 0) && (
+                       ($f < $last_frame) || (
+                               ($ong_state >= STATE->{'end'}) &&
+                               ($f <= $last_frame)
+                       )
+               )
+       ) {
                return;
        }
        my $r;