use botm_common (
'read_header_env',
'read_data_file',
- 'url_query_encode', 'url_query_decode',
- 'merge_url',
- 'join_path',
- 'html_entity_encode_dec'
+ 'url_query_decode',
+ '_x_encoded'
);
use bsta_lib (
'STATE',
'fail_method', 'fail_content_type',
+ 'redirect',
'get_password',
- 'print_html_start', 'print_html_end',
- 'print_html_head_start', 'print_html_head_end',
- 'print_html_body_start', 'print_html_body_end',
- 'write_index',
+ 'print_goto',
'merge_settings'
);
###PERL_PATH_SEPARATOR: PATH_SEPARATOR = /
###PERL_CGI_PATH: CGI_PATH = /bsta/
+###PERL_CGI_LIST_PATH: CGI_LIST_PATH = /bsta/goto.htm
###PERL_CGI_VIEWER_PATH: CGI_VIEWER_PATH = /bsta/v
###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta/
###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
+###PERL_WWW_GOTO_PATH: WWW_GOTO_PATH = /botm/www/1190/bsta/goto.htm
+
###PERL_WEBSITE_NAME: WEBSITE_NAME = Bicycles on the Moon
binmode STDIN, ':encoding(UTF-8)';
my $method;
my $password;
my $password_ok;
-my $password_query;
-my $frame;
-my $last_frame;
-my $ong_state;
-my $line;
+my $no_cgi;
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
}
}
+$no_cgi = (scalar (keys %cgi) == 0);
+
+if ($no_cgi) {
+ if (_x_encoded('-f', WWW_GOTO_PATH())) {
+ exit redirect($method, CGI_LIST_PATH());
+ }
+}
+
$password = get_password(\%cgi);
%settings = read_data_file(DATA_SETTINGS_PATH());
%state = read_data_file(DATA_STATE_PATH());
%goto_list = read_data_file(DATA_LIST_PATH());
-$last_frame = int($state{'last'});
-$ong_state = int($state{'state'});
-
$password_ok = ($password eq $settings{'password'});
-$password_query = url_query_encode({'p', $settings{'password'}});
print "Content-type: text/html; charset=UTF-8\n";
print "\n";
exit;
}
-my $_title = html_entity_encode_dec($settings{'story'}, 1);
-my $_website_name = html_entity_encode_dec(WEBSITE_NAME() , 1);
-my $_base_url = html_entity_encode_dec(CGI_PATH() , 1);
-
-print_html_start(\*STDOUT);
-print_html_head_start(\*STDOUT);
-
-print ' <title>GOTO • '.$_title.' • '.$_website_name.'</title>'."\n";
-
-print_html_head_end(\*STDOUT);
-print_html_body_start(\*STDOUT);
-
-print ' <div id="inst" class="ins">'."\n";
-
-print ' <div id="title">'."\n";
-print ' <h1 id="titletext">'.$_title.'</h1>'."\n";
-print ' </div>'."\n";
-
-print ' </div>'."\n";
-print ' <div id="insb" class="ins">'."\n";
-
-print ' <div id="chat">'."\n";
-for ($frame = 0; ; $frame += 1) {
- unless (
- $password_ok || (
- ($frame <= $last_frame) &&
- ($ong_state >= STATE->{'waiting'})
- )
- ) {
- last;
- }
- my $title;
- my $ongtime;
- my @time_tab;
- my $time_text;
- my $timer_color;
- my $frame_text;
- my $viewer_url;
-
- $ongtime = $goto_list{'ongtime-'.$frame};
- $title = $goto_list{'title-' .$frame};
- if (($ongtime eq '') && ($title eq '')) {
- my $frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame);
- my %frame_data = read_data_file($frame_data_path);
- $ongtime = $frame_data{'ongtime'};
- $title = $frame_data{'title'};
- unless (keys %frame_data) {
- last;
- }
- }
-
- if ($ongtime ne '') {
- @time_tab = gmtime($ongtime);
- $time_text = sprintf(
- '%02d.%02d.%02d %02d:%02d',
- $time_tab[3],
- $time_tab[4]+1,
- $time_tab[5]-100, # TODO: %100 ?
- $time_tab[2],
- $time_tab[1]
- );
- }
- else {
- $time_text = (($frame <= $last_frame) && ($ong_state >= STATE->{'waiting'})) ?
- 'EE.EE.EE EE:EE' : '--.--.-- --:--';
- }
- if ($title eq '') {
- $title = '_';
- }
- $timer_color = (($frame > $last_frame) || ($ong_state < STATE->{'waiting'})) ?
- 'cz' : (
- (($frame == $last_frame) && ($ong_state < STATE->{'ready'})) ?
- 'ni' : 'br'
- );
- $frame_text = sprintf('%03d',$frame);
- $viewer_url = merge_url(
- {'path' => CGI_VIEWER_PATH()},
- {'path' => $frame}
- );
- if ($password_ok) {
- $viewer_url = merge_url($viewer_url, {'query' => $password_query, 'append_query' => 1, 'preserve_fragment' => 1});
- }
-
- my $_viewer_url = html_entity_encode_dec($viewer_url, 1);
- my $_title = html_entity_encode_dec($title , 1);
-
- print ' <span class="'.$timer_color.'">'.$frame_text.'</span> '.$time_text.' <a href="'.$_viewer_url.'">'.$_title.'</a><br>'."\n";
-}
-print ' </div>'."\n";
-
-print ' <div id="underlinks">'."\n";
-print ' <a href="'.$_base_url.'">BSTA</a>'."\n";
-print ' </div>'."\n";
-
-print ' </div>'."\n";
-
-print_html_body_end(\*STDOUT, $ong_state == STATE->{'inactive'});
-print_html_end(\*STDOUT);
+print_goto(
+ \*STDOUT,
+ \%state,
+ \%settings,
+ \%goto_list,
+ $password_ok
+);