-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# /bsta/v
# viewer is generated from viewer.1.pl.
-# 09.01.2023
#
# The viewer interface
#
-# Copyright (C) 2016-2017, 2019-2020, 2023 Balthasar Szczepański
+# Copyright (C) 2016-2017, 2019-2020, 2023 Balthasar Szczepański
#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
use strict;
#use warnings;
-###LIB;
+###PERL_LIB: use lib /botm/lib/bsta
use bsta_lib qw(failpage gethttpheader getcgi entityencode readdatafile writedatafile printdatafileht urlencode bb2ht bb2bb linehtml);
use File::Copy;
-###DATA_PATH;
-###DEFAULT_PATH;
-###SETTINGS_PATH;
-###STATE_PATH;
-###LOGO_PATH;
-###FAVICON_PATH;
-###WEBSITE;
-###WEBSITE_NAME;
-###CSS_PATH;
-###CGI_PATH;
-###FRAME_PATH;
-###VIEWER_PATH;
-###NOACCESS_PATH;
-###STORY_PATH;
-###WWW_PATH;
-###INDEX_PATH;
-###ATTACH_PATH;
-###INFO_PATH;
-###BBCODE_PATH;
-###GOTO_PATH;
-###LIST_PATH;
-###TIMER_PATH;
+###PERL_CGI_PATH: CGI_PATH = /bsta/
+###PERL_CGI_ATTACH_PATH: CGI_ATTACH_PATH = /bsta/a
+###PERL_CGI_BBCODE_PATH: CGI_BBCODE_PATH = /bsta/b
+###PERL_CGI_CSS_PATH: CGI_CSS_PATH = /bsta/bsta.css
+###PERL_CGI_FRAME_PATH: CGI_FRAME_PATH = /bsta/f
+###PERL_CGI_GOTO_PATH: CGI_GOTO_PATH = /bsta/g
+###PERL_CGI_INFO_PATH: CGI_INFO_PATH = /bsta/i
+###PERL_CGI_LOGO_PATH: CGI_LOGO_PATH = /bsta/botmlogo.png
+###PERL_CGI_TIMER_PATH: CGI_TIMER_PATH = /bsta/timer.js
+###PERL_CGI_VIEWER_PATH: CGI_VIEWER_PATH = /bsta/v
+
+###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta/
+###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
+###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
+###PERL_DATA_NOACCESS_PATH: DATA_NOACCESS_PATH = /botm/data/bsta/noaccess
+###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_WWW_PATH: WWW_PATH = /botm/www/1190/bsta/
+###PERL_WWW_INDEX_PATH: WWW_INDEX_PATH = /botm/www/1190/bsta/index.htm
+
+###PERL_WEBSITE: WEBSITE = 1190.bicyclesonthemoon.info
+###PERL_WEBSITE_NAME: WEBSITE_NAME = Bicycles on the Moon
+###PERL_FAVICON_PATH: FAVICON_PATH = /img/favicon.png
my %http;
my %cgi;
my $textmode;
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
-###PATH;
+###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
if ($ENV{'REQUEST_METHOD'} =~ /^(HEAD|GET|POST)$/) {
$method=$1;
}
# print "Content-type: text/plain\n\n";
-%settings=readdatafile(SETTINGS_PATH);
-%default=readdatafile(DEFAULT_PATH);
+%settings=readdatafile(DATA_SETTINGS_PATH);
+%default=readdatafile(DATA_DEFAULT_PATH);
%framedata=readdatafile(DATA_PATH.$frame);
if($password eq $settings{'password'}){
$passwordOK = 1;
$passwordOK = 0;
}
-if (open ($statefile,"+<",STATE_PATH)){
+if (open ($statefile,"+<",DATA_STATE_PATH)){
if (flock($statefile,2)) {
%state=readdatafile($statefile);
my $inpath;
my $outpath;
- %story = readdatafile(STORY_PATH);
- %gotolist=readdatafile(LIST_PATH);
+ %story = readdatafile(DATA_STORY_PATH);
+ %gotolist=readdatafile(DATA_LIST_PATH);
if(int($story{'state'}) == 17 && int($story{'pass'}) == 1) {
#ACTIVATE!
$gotolist{'ongtime-1'}=$framedata{'ongtime'};
if(copy ($inpath, $outpath)) {
- writeindex(INDEX_PATH);
+ writeindex(WWW_INDEX_PATH);
writedatafile($statefile,%state);
- writedatafile(LIST_PATH,%gotolist);
+ writedatafile(DATA_LIST_PATH,%gotolist);
}
else {
$state{'state'} = 0;
}
else {
$access=0;
- %framedata = readdatafile(NOACCESS_PATH);
+ %framedata = readdatafile(DATA_NOACCESS_PATH);
foreach my $ind (keys %default) {
unless(defined($framedata{$ind})){
$framedata{$ind}=$default{$ind};
}
print entityencode($settings{'story'}).' • '.WEBSITE_NAME.'</title>'."\n";
print '<link rel="icon" type="image/png" href="'.FAVICON_PATH.'">'."\n";
-print '<link rel="stylesheet" href="'.CSS_PATH.'">'."\n";
-print '<link rel="index" href="'.GOTO_PATH.($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
-print '<link rel="start" href="'.VIEWER_PATH.'/0'.($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
+print '<link rel="stylesheet" href="'.CGI_CSS_PATH.'">'."\n";
+print '<link rel="index" href="'.CGI_GOTO_PATH.($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
+print '<link rel="start" href="'.CGI_VIEWER_PATH.'/0'.($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
if($frame>0 && $access) {
- print '<link rel="prev" href="'.VIEWER_PATH.'/'.($frame - 1).($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
+ print '<link rel="prev" href="'.CGI_VIEWER_PATH.'/'.($frame - 1).($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
}
if ($passwordOK || $frame<int($state{'last'})) {
- print '<link rel="next" href="'.VIEWER_PATH.'/'.($frame + 1).($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
- print '<link rel="prefetch" href="'.VIEWER_PATH.'/'.($frame + 1).($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
+ print '<link rel="next" href="'.CGI_VIEWER_PATH.'/'.($frame + 1).($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
+ print '<link rel="prefetch" href="'.CGI_VIEWER_PATH.'/'.($frame + 1).($passwordOK?('?p='.urlencode($password)):'').'">'."\n";
}
if($frame==int($state{'last'}) && int($state{'state'}) >= 1 && int($state{'state'}) < 3) {
- print '<!-- <script src="'.TIMER_PATH.'"></script> -->'."\n";
+ print '<!-- <script src="'.CGI_TIMER_PATH.'"></script> -->'."\n";
}
print '</head><body>'."\n";
-print '<a href="/"><img id="botmlogo" src="'.LOGO_PATH.'" alt="'.WEBSITE.'"></a>'."\n";
+print '<a href="/"><img id="botmlogo" src="'.CGI_LOGO_PATH.'" alt="'.WEBSITE.'"></a>'."\n";
print '<div id="all">'."\n";
print '<div id="inst" class="ins">'."\n";
print CGI_PATH.sprintf($settings{'frame'},$frame,$framedata{'ext'});
}
else {
- print FRAME_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'');
+ print CGI_FRAME_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'');
}
print '" id="frame" alt="'.$frame.'" title="'.entityencode($framedata{'title'}).'">'."\n";
}
elsif($textmode==1){
print '<div id="chat">'."\n";
print '[quote][center][size=200]'.entityencode($framedata{'title'}).'[/size]<br>'."\n";
- print '[url=http://'.WEBSITE.VIEWER_PATH.'/'.$frame.'][img]http://'.WEBSITE.CGI_PATH.($access?sprintf($settings{'frame'},$frame,$framedata{'ext'}):$framedata{'frame'}).'[/img][/url][/center]<br>'."\n";
+ print '[url=http://'.WEBSITE.CGI_VIEWER_PATH.'/'.$frame.'][img]http://'.WEBSITE.CGI_PATH.($access?sprintf($settings{'frame'},$frame,$framedata{'ext'}):$framedata{'frame'}).'[/img][/url][/center]<br>'."\n";
print bb2bbf($framedata{'content'}).'[/quote]</div>'."\n";
}
elsif($framedata{'content'} ne ''){
}
print '>';
if (!$access){
- print '<a href="'.VIEWER_PATH.'/-1">'.entityencode($framedata{'command'}).'</a><br>'."\n";
+ print '<a href="'.CGI_VIEWER_PATH.'/-1">'.entityencode($framedata{'command'}).'</a><br>'."\n";
}
else {
if ($passwordOK || $frame<int($state{'last'}) || (int($state{'state'}) >= 2 && $showcommand)) {
if ($passwordOK || $frame<int($state{'last'})) {
- print '<a href="'.VIEWER_PATH.'/'.($frame + 1).($passwordOK?('?p='.urlencode($password)):'').'">';
+ print '<a href="'.CGI_VIEWER_PATH.'/'.($frame + 1).($passwordOK?('?p='.urlencode($password)):'').'">';
}
if($nextframedata{'title'} ne '') {
print entityencode($nextframedata{'title'});
print '<div id="underlinks">'."\n";
print '<a href="'.CGI_PATH.'">Once again</a>';
if($frame>0 && $access) {
- print ' | <a href="'.VIEWER_PATH.'/'.($frame-1).($passwordOK?('?p='.urlencode($password)):'').'">Before</a>';
+ print ' | <a href="'.CGI_VIEWER_PATH.'/'.($frame-1).($passwordOK?('?p='.urlencode($password)):'').'">Before</a>';
}
if($frame != int($state{'last'})) {
- print ' | <a href="'.VIEWER_PATH.'/'.int($state{'last'}).($passwordOK?('?p='.urlencode($password)):'').'">Now</a>';
+ print ' | <a href="'.CGI_VIEWER_PATH.'/'.int($state{'last'}).($passwordOK?('?p='.urlencode($password)):'').'">Now</a>';
}
-print ' | <a href="'.GOTO_PATH.($passwordOK?('?p='.urlencode($password)):'').'">GOTO</a>'."\n";
+print ' | <a href="'.CGI_GOTO_PATH.($passwordOK?('?p='.urlencode($password)):'').'">GOTO</a>'."\n";
print '<span style="float: right;">'."\n";
if ($textmode!=0) {
- print '<a href="'.VIEWER_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'').'">Without</a> | ';
+ print '<a href="'.CGI_VIEWER_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'').'">Without</a> | ';
}
-print '<a href="'.(($textmode==2)?(INFO_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'')):(VIEWER_PATH.'/'.$frame.'?b=2'.($passwordOK?('&p='.urlencode($password)):''))).'">Info</a>';
-print ' | <a href="'.(($textmode==1)?(BBCODE_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'')):(VIEWER_PATH.'/'.$frame.'?b=1'.($passwordOK?('&p='.urlencode($password)):''))).'">BB</a>';
+print '<a href="'.(($textmode==2)?(CGI_INFO_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'')):(CGI_VIEWER_PATH.'/'.$frame.'?b=2'.($passwordOK?('&p='.urlencode($password)):''))).'">Info</a>';
+print ' | <a href="'.(($textmode==1)?(CGI_BBCODE_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'')):(CGI_VIEWER_PATH.'/'.$frame.'?b=1'.($passwordOK?('&p='.urlencode($password)):''))).'">BB</a>';
print "\n</span>\n";
print '</div>'."\n";
%framedata = readdatafile(DATA_PATH.0);
%nextframedata = readdatafile(DATA_PATH.1);
- %default=readdatafile(DEFAULT_PATH);
+ %default=readdatafile(DATA_DEFAULT_PATH);
foreach my $ind (keys %default) {
unless(defined($framedata{$ind})){
print $indexfile '<meta http-equiv="Content-type" content="text/html; charset=UTF-8">'."\n";
print $indexfile '<title>'.entityencode($settings{'story'}).' • '.WEBSITE_NAME.'</title>'."\n";
print $indexfile '<link rel="icon" type="image/png" href="'.FAVICON_PATH.'">'."\n";
- print $indexfile '<link rel="stylesheet" href="'.CSS_PATH.'">'."\n";
- print $indexfile '<link rel="index" href="'.GOTO_PATH.'">'."\n";
- print $indexfile '<link rel="start" href="'.VIEWER_PATH.'/0">'."\n";
- print $indexfile '<link rel="next" href="'.VIEWER_PATH.'/1">'."\n";
- print $indexfile '<link rel="prefetch" href="'.VIEWER_PATH.'/1">'."\n";
+ print $indexfile '<link rel="stylesheet" href="'.CGI_CSS_PATH.'">'."\n";
+ print $indexfile '<link rel="index" href="'.CGI_GOTO_PATH.'">'."\n";
+ print $indexfile '<link rel="start" href="'.CGI_VIEWER_PATH.'/0">'."\n";
+ print $indexfile '<link rel="next" href="'.CGI_VIEWER_PATH.'/1">'."\n";
+ print $indexfile '<link rel="prefetch" href="'.CGI_VIEWER_PATH.'/1">'."\n";
print $indexfile '</head><body>'."\n";
- print $indexfile '<a href="/"><img id="botmlogo" src="'.LOGO_PATH.'" alt="'.WEBSITE.'"></a>'."\n";
+ print $indexfile '<a href="/"><img id="botmlogo" src="'.CGI_LOGO_PATH.'" alt="'.WEBSITE.'"></a>'."\n";
print $indexfile '<div id="all">'."\n";
print $indexfile '<div id="inst" class="ins">'."\n";
print $indexfile '</div>'."\n";
print $indexfile '<div id="command">'."\n";
- print $indexfile '><a href="'.VIEWER_PATH.'/1">'.entityencode($nextframedata{'title'}).'</a>'."\n";
+ print $indexfile '><a href="'.CGI_VIEWER_PATH.'/1">'.entityencode($nextframedata{'title'}).'</a>'."\n";
print $indexfile '</div>'."\n";
print $indexfile '<div id="underlinks">'."\n";
# <span style="float: right;"><a href="/bsta/v/0?b=2">Info</a> | <a href="/bsta/v/0?b=1">BB</a></span>
- print $indexfile '<a href="'.VIEWER_PATH.'/-1">Now</a> | <a href="'.GOTO_PATH.'">GOTO</a>';
- print $indexfile '<span style="float: right;"><a href="'.INFO_PATH.'/0?b=2">Info</a> | <a href="'.VIEWER_PATH.'/0?b=1">BB</a></span>'."\n";
+ print $indexfile '<a href="'.CGI_VIEWER_PATH.'/-1">Now</a> | <a href="'.CGI_GOTO_PATH.'">GOTO</a>';
+ print $indexfile '<span style="float: right;"><a href="'.CGI_INFO_PATH.'/0?b=2">Info</a> | <a href="'.CGI_VIEWER_PATH.'/0?b=1">BB</a></span>'."\n";
print $indexfile '</div>'."\n";
print $indexfile '</div>'."\n";
$posttext = substr ($bb,pos ($bb));
if ($tagvalue =~ /^att&([0-9]+)$/) {
- $tagvalue = ATTACH_PATH.'/'.int($1).($passwordOK?('?p='.urlencode($password)):'');
+ $tagvalue = CGI_ATTACH_PATH.'/'.int($1).($passwordOK?('?p='.urlencode($password)):'');
}
elsif ($tagvalue =~ /^vw&([0-9]+)$/) {
- $tagvalue = VIEWER_PATH.'/'.int($1).($passwordOK?('?p='.urlencode($password)):'');
+ $tagvalue = CGI_VIEWER_PATH.'/'.int($1).($passwordOK?('?p='.urlencode($password)):'');
}
elsif ($tagvalue =~ /^fr&([0-9]+)$/) {
- $tagvalue = FRAME_PATH.'/'.int($1).($passwordOK?('?p='.urlencode($password)):'');
+ $tagvalue = CGI_FRAME_PATH.'/'.int($1).($passwordOK?('?p='.urlencode($password)):'');
}
else {
$tagvalue = '';
$posttext = substr ($bb,pos ($bb));
if ($tagvalue =~ /^att&([0-9]+)$/) {
- $tagvalue = 'http://'.WEBSITE.ATTACH_PATH.'/'.int($1);
+ $tagvalue = 'http://'.WEBSITE.CGI_ATTACH_PATH.'/'.int($1);
}
elsif ($tagvalue =~ /^vw&([0-9]+)$/) {
- $tagvalue = 'http://'.WEBSITE.VIEWER_PATH.'/'.int($1);
+ $tagvalue = 'http://'.WEBSITE.CGI_VIEWER_PATH.'/'.int($1);
}
elsif ($tagvalue =~ /^fr&([0-9]+)$/) {
- $tagvalue = 'http://'.WEBSITE.FRAME_PATH.'/'.int($1);
+ $tagvalue = 'http://'.WEBSITE.CGI_FRAME_PATH.'/'.int($1);
}
else {
$tagvalue = '';