###PERL_LIB: use lib /botm/lib/bsta
use botm_common (
+ 'HTTP_STATUS',
'read_header_env',
'read_data_file', 'write_data_file',
'url_query_decode',
- 'join_path'
+ 'join_path',
+ 'open_encoded',
+ 'http_header_status',
);
use bsta_lib (
'STATE', 'TEXT_MODE', 'INTF_STATE',
###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
###PERL_DATA_STORY_PATH: DATA_STORY_PATH = /botm/data/bsta/story
+###PERL_DATA_WORDS_PATH: DATA_WORDS_PATH = /botm/data/bsta/words/
binmode STDIN, ':encoding(UTF-8)';
binmode STDOUT, ':encoding(UTF-8)';
my %http;
my %cgi;
my %frame_data;
+my %prev_frame_data;
my %next_frame_data;
my %default;
my %settings;
my %state;
my %new_state;
my %goto_list;
+my %words_data;
my $method;
my $frame;
my $frame_data_path;
+my $prev_frame_data_path;
my $next_frame_data_path;
my $password;
my $password_ok;
my $access;
my $timer;
my $timer_unlocked;
-my $state_file;
+my $fh;
my $show_command;
my $ongtime;
my $text_mode;
+my $words_page;
+my $words_data_path;
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
$method = $1;
}
else{
- exit fail_method($ENV{'REQUEST_METHOD'}, 'GET, POST, HEAD');
+ exit fail_method($ENV{'REQUEST_METHOD'}, ['GET', 'POST', 'HEAD']);
}
%http = read_header_env(\%ENV);
$password_ok = ($password eq $settings{'password'});
# state & activation logic
-if (open ($state_file, "+<:encoding(UTF-8)", DATA_STATE_PATH())) {
- if (flock($state_file, 2)) {
+if (open_encoded($fh, "+<:encoding(UTF-8)", DATA_STATE_PATH())) {
+ if (flock($fh, 2)) {
- %state = read_data_file($state_file);
+ %state = read_data_file($fh);
if ($frame < 0) {
$frame = int($state{'last'}) + $frame +1;
else {
$new_state{'state'} = STATE->{'ready'};
}
- write_data_file($state_file, '', '', \%new_state);
+ write_data_file($fh, \%new_state);
}
}
elsif (
$r = write_index(\%state, \%settings);
}
if ($r) {
- $r = write_data_file($state_file, '','', \%state);
+ $r = write_data_file($fh, \%state);
}
unless ($r) {
# FAILED ONG! Story as if it was inactive!
# FAILED GET STATE! Story as if it was inactive!
$state{'state'} = STATE->{'inactive'};
}
- close ($state_file);
+ close ($fh);
}
else {
$state{'state'} = STATE->{'inactive'};
}
-$next_frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame+1);
-%next_frame_data = read_data_file($next_frame_data_path);
-
-# apply defaults
-%frame_data = merge_settings(\%default, \%frame_data);
-%next_frame_data = merge_settings(\%default, \%next_frame_data);
-
$timer = int($state{'nextong'}) - $time;
$ongtime = int($state{'ongtime'});
if($ongtime == 0) {
)
) {
$access = 1;
+ if ($frame > 0) {
+ $prev_frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame-1);
+ %prev_frame_data = read_data_file($prev_frame_data_path);
+ }
+ $next_frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame+1);
+ %next_frame_data = read_data_file($next_frame_data_path);
+
+ %frame_data = merge_settings(\%default, \%frame_data);
+ %prev_frame_data = merge_settings(\%default, \%prev_frame_data);
+ %next_frame_data = merge_settings(\%default, \%next_frame_data);
}
else {
$access = 0;
}
$text_mode = int($cgi{'b'});
-if($text_mode > 2) {
+if($text_mode > TEXT_MODE->{'words'}) {
$text_mode = TEXT_MODE->{'normal'};
}
+$words_page = int($cgi{'i'});
+
+$words_data_path = join_path(PATH_SEPARATOR(), DATA_WORDS_PATH(), $frame);
+%words_data = read_data_file(
+ $words_data_path, # file
+ '', # encoding
+ 0, # no header
+ ($text_mode != TEXT_MODE->{'words'}), # header only
+ 1, # as list
+);
-print "Content-type: text/html\n";
-if(!$access) {
- print "Status: 403 Forbidden\n";
+if (!$access) {
+ print http_header_status(HTTP_STATUS->{'forbidden'});
}
-print "\n";
+print "Content-type: text/html; charset=UTF-8\n\n";
if($method eq 'HEAD') {
exit;
}
'static' => 0,
'show_command' => $show_command,
'text_mode' => $text_mode,
+ 'words_page' => $words_page
},
\%state,
\%settings,
\%frame_data,
- \%next_frame_data
+ $access ? \%prev_frame_data : \%frame_data,
+ $access ? \%next_frame_data : \%frame_data,
+ \%words_data,
);