--- /dev/null
+[submodule "config"]
+ path = config
+ url = ../../botm/config
+[submodule "exec"]
+ path = exec
+ url = ../../botm/exec
+++ /dev/null
-// 2words.c is generated from 2words.1.c
-// 28.09.2016
-//
-// This is the wrapper for 2words.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2016 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###TWOWORDS_PL;
-###TWOWORDS_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(TWOWORDS_PL_ERRLOG,"at",stderr);
- return execve(TWOWORDS_PL,argv,envp);
-}
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# /bsta/2words
# 2words is generated from 2words.1.pl.
-# 09.01.2023
#
# The wordgame interface
#
-# Copyright (C) 2016 - 2017, 2023 Balthasar Szczepański
+# Copyright (C) 2016 - 2017, 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 urlencode bb2ht);
use File::Copy;
-###STORY_PATH;
-###LOGO_PATH;
-###FAVICON_PATH;
-###WEBSITE;
-###WEBSITE_NAME;
-###CSS_PATH;
-###TWOWORDS_PATH;
-###CGI_PATH;
-###SETTINGS_PATH;
-###INDEX_PATH;
-###INTF_DATE;
-###DATA_PATH;
-###VIEWER_PATH;
-###DEFAULT_PATH;
-###STATE_PATH;
-###WWW_PATH;
-###STORY_LENGTH;
-###PAGE_LENGTH;
-###FIRSTPAGE_LENGTH;
-###COIN_PATH;
-###COIN_DATE;
-###LIST_PATH;
+###PERL_CGI_PATH: CGI_PATH = /bsta/
+###PERL_CGI_2WORDS_PATH: CGI_2WORDS_PATH = /bsta/2words
+###PERL_CGI_CSS_PATH: CGI_CSS_PATH = /bsta/bsta.css
+###PERL_CGI_LOGO_PATH: CGI_LOGO_PATH = /bsta/botmlogo.png
+###PERL_CGI_VIEWER_PATH: CGI_VIEWER_PATH = /bsta/v
+
+###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta/
+###PERL_DATA_COIN_PATH: DATA_COIN_PATH = /botm/data/bsta/coincidence
+###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
+###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
+###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
+
+###PERL_COIN_DATE: COIN_DATE = 13-Nov-2016 22:15
+###PERL_INTF_DATE: INTF_DATE = 28-Sep-2016 20:34
+
+###PERL_STORY_LENGTH: STORY_LENGTH = 16
+###PERL_PAGE_LENGTH: PAGE_LENGTH = 16
+###PERL_FIRSTPAGE_LENGTH: FIRSTPAGE_LENGTH = 4
+
my %http;
my %cgi;
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;
$words=$cgi{'words'};
}
-%settings=readdatafile(SETTINGS_PATH);
-%state=readdatafile(STATE_PATH);
+%settings=readdatafile(DATA_SETTINGS_PATH);
+%state=readdatafile(DATA_STATE_PATH);
$ongstate=int($state{'state'});
$storylock=0;
-if (open ($storyfile,"+<",STORY_PATH)){
+if (open ($storyfile,"+<",DATA_STORY_PATH)){
$storylock=1;
if (flock($storyfile,2)) {
$storylock=2;
$story{'state'}='0';
$turn=0;
if($ongstate == 0) {
- writeindex(INDEX_PATH,0,0,0);
+ writeindex(WWW_INDEX_PATH,0,0,0);
}
writedatafile($storyfile,%story);
}
if ($cgi{'next'} ne '') {
if (split(/\r?\n/,$story{'content'}) >= (STORY_LENGTH-1)) {
- $storypath = STORY_PATH.$storyid;
+ $storypath = DATA_STORY_PATH.$storyid;
writedatafile($storypath,%story);
$newstory{'id'} = $storyid + 1;
$newstory{'letter'}='';
$intfmode=0;
$intfpause=0;
if($ongstate == 0) {
- writeindex(INDEX_PATH,0,0,0);
+ writeindex(WWW_INDEX_PATH,0,0,0);
}
writedatafile($storyfile,%newstory);
}
$intfpass = 2;
$story{'pass'} = '2';
if($ongstate == 0) {
- writeindex(INDEX_PATH,2,0,0);
+ writeindex(WWW_INDEX_PATH,2,0,0);
}
}
elsif(lc($2).' '.lc($4) eq $settings{'unlock'}) {
if ($intfpass == 0) {
if($ongstate == 0) {
my %framedata = readdatafile(DATA_PATH.0);
- my %default = readdatafile(DEFAULT_PATH);
+ my %default = readdatafile(DATA_DEFAULT_PATH);
my $inpath;
my $outpath;
$gotolist{'title-0'} = $framedata{'title'};
$gotolist{'ongtime-0'} = $framedata{'ongtime'};
writedatafile(DATA_PATH.0,%framedata);
- writedatafile(LIST_PATH,%gotolist);
+ writedatafile(DATA_LIST_PATH,%gotolist);
foreach my $ind (keys %default) {
unless(defined($framedata{$ind})){
$intfpause=0;
$story{'pass'} = '1';
$story{'state'} = '0';
- writeindex(INDEX_PATH,1,0,0);
+ writeindex(WWW_INDEX_PATH,1,0,0);
}
}
else {
$intfmode -= 1;
}
$story{'state'} = $intfstate;
- writeindex(INDEX_PATH,1,$intfmode,$intfpause);
+ writeindex(WWW_INDEX_PATH,1,$intfmode,$intfpause);
writedatafile($storyfile,%story);
}
@storylines = split(/\r?\n/,$story{'content'});
print '<title>Two words • '.WEBSITE_NAME.'</title>'."\n";
print '<meta http-equiv="Content-type" content="text/html; charset=UTF-8">'."\n";
print '<link rel="icon" type="image/png" href="'.FAVICON_PATH.'">'."\n";
-print '<link rel="stylesheet" href="'.CSS_PATH.'">'."\n";
+print '<link rel="stylesheet" href="'.CGI_CSS_PATH.'">'."\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";
}
if ($turn) {
- print '<form method="post" action="'.TWOWORDS_PATH.'">'."\n";
+ print '<form method="post" action="'.CGI_2WORDS_PATH.'">'."\n";
if ($message eq '') {
if ($story{"content"} eq '') {
print 'Two words, please:<br>'."\n";
print '</div><div id="insb" class="ins">'."\n";
print '<div id="undertext">'."\n";
for (my $i = $storyid-1-(($page!=0)?((($page-1)*PAGE_LENGTH)+FIRSTPAGE_LENGTH):0); $i > ($storyid-1-($page*PAGE_LENGTH)- FIRSTPAGE_LENGTH) && $i >= 0; --$i) {
- $storypath = STORY_PATH.$i;
+ $storypath = DATA_STORY_PATH.$i;
%newstory = readdatafile($storypath);
print '<p class="'.(($i&1)?'br':'ni').'" id="s'.$i.'">'.entityencode($newstory{'content'}).'</p>'."\n";
}
print '</div>'."\n";
print '<div id="underlinks">'."\n";
-print '<a href="'.CGI_PATH.'">BSTA</a> | <a href="'.TWOWORDS_PATH.'">Once again</a>';
+print '<a href="'.CGI_PATH.'">BSTA</a> | <a href="'.CGI_2WORDS_PATH.'">Once again</a>';
if(($storyid - ($page*PAGE_LENGTH)) - FIRSTPAGE_LENGTH > 0) {
- print ' | <a href="'.TWOWORDS_PATH.'/'.($page+1).'">Before</a>';
+ print ' | <a href="'.CGI_2WORDS_PATH.'/'.($page+1).'">Before</a>';
}
if($page > 0) {
- print ' | <a href="'.TWOWORDS_PATH.'/'.($page-1).'">Unbefore</a>';
+ print ' | <a href="'.CGI_2WORDS_PATH.'/'.($page-1).'">Unbefore</a>';
}
if(($storyid - ($page*PAGE_LENGTH)) - FIRSTPAGE_LENGTH > 0) {
- print ' | <a href="'.TWOWORDS_PATH.'/'.(int(($storyid - FIRSTPAGE_LENGTH - 1) / PAGE_LENGTH) + 1).'">Initially</a>';
+ print ' | <a href="'.CGI_2WORDS_PATH.'/'.(int(($storyid - FIRSTPAGE_LENGTH - 1) / PAGE_LENGTH) + 1).'">Initially</a>';
}
if($turn) {
print ' | (Entering words here is irreversible. Your actions might be remembered forever. So please be reasonable.)';
$indexof = CGI_PATH;
$indexof =~ s/\/$//g;
- my %coin = readdatafile(COIN_PATH);
+ my %coin = readdatafile(DATA_COIN_PATH);
if ($pass != 1) {
print $indexfile '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'."\n";
%framedata = readdatafile(DATA_PATH.0);
%nextframedata = readdatafile(DATA_PATH.1);
- %default=readdatafile(DEFAULT_PATH);
+ %default=readdatafile(DATA_DEFAULT_PATH);
# if($mode == 16 && $pause) {
# $framedata{'ongtime'} = $time;
print $indexfile '</title>'."\n";
print $indexfile '<meta http-equiv="Content-type" content="text/html; charset=UTF-8">'."\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="stylesheet" href="'.CGI_CSS_PATH.'">'."\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";
elsif ($mode == 16) {
if($pause) {
print $indexfile '[<span class="br">00</span>:<span class="br">00</span>:<span class="br">00</span>]<br>'."\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";
}
else {
print $indexfile '[<span class="ni">--</span>:<span class="ni">--</span>:<span class="ni">--</span>]<br>'."\n";
+++ /dev/null
-// attach.c is generated from attach.1.c
-// 19.10.2016
-//
-// This is the wrapper for frame.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2016 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###ATTACH_PL;
-###ATTACH_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(ATTACH_PL_ERRLOG,"at",stderr);
- return execve(ATTACH_PL,argv,envp);
-}
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# /bsta/a
# attach.pl is generated from attach.1.pl.
-# 19.10.2016
#
# The attachment interface
#
-# Copyright (C) 2016 Balthasar Szczepañski
+# Copyright (C) 2016, 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 readdatafile);
-###SETTINGS_PATH;
-###DATA_PATH;
-###STATE_PATH;
+###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta
+###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
+###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
my %http;
my %cgi;
my $direct;
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;
$password='';
}
-%settings=readdatafile(SETTINGS_PATH);
-%state=readdatafile(STATE_PATH);
+%settings=readdatafile(DATA_SETTINGS_PATH);
+%state=readdatafile(DATA_STATE_PATH);
%filedata=readdatafile(DATA_PATH.'a'.$ID);
if ($filedata{'frame'} ne '') {
$frame=int($filedata{'frame'});
+++ /dev/null
-// bbcode.c is generated from bbcode.1.c
-// 05.06.2017
-//
-// This is the wrapper for bbcode.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2017 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###BBCODE_PL;
-###BBCODE_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(BBCODE_PL_ERRLOG,"at",stderr);
- return execve(BBCODE_PL,argv,envp);
-}
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# /bsta/b
# bbcode.pl is generated from bbcode.1.pl.
-# 05.06.2017
#
# The bbcode interface
#
-# Copyright (C) 2017 Balthasar Szczepański
+# Copyright (C) 2017, 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 readdatafile bb2bb linehtml);
use File::Copy;
-###DATA_PATH;
-###DEFAULT_PATH;
-###SETTINGS_PATH;
-###STATE_PATH;
-###NOACCESS_PATH;
-###WEBSITE;
-###VIEWER_PATH;
-###ATTACH_PATH;
-###FRAME_PATH;
-###CGI_PATH;
+###PERL_CGI_PATH: CGI_PATH = /bsta/
+###PERL_CGI_ATTACH_PATH: CGI_ATTACH_PATH = /bsta/a
+###PERL_CGI_FRAME_PATH: CGI_FRAME_PATH = /bsta/f
+###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_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_WEBSITE: WEBSITE = 1190.bicyclesonthemoon.info
my %http;
my %cgi;
my $seconds;
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;
$password='';
}
-%settings=readdatafile(SETTINGS_PATH);
-%default=readdatafile(DEFAULT_PATH);
+%settings=readdatafile(DATA_SETTINGS_PATH);
+%default=readdatafile(DATA_DEFAULT_PATH);
%framedata=readdatafile(DATA_PATH.$frame);
-%state=readdatafile(STATE_PATH);
+%state=readdatafile(DATA_STATE_PATH);
if($password eq $settings{'password'}){
$passwordOK = 1;
}
}
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 '[quote][center][size=200]'.$framedata{'title'}.'[/size]'."\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]'."\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]'."\n";
print bb2bbf($framedata{'content'}).'[/quote]'."\n";
sub bb2bbf {
$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 = '';
--- /dev/null
+# bsta.conf is automatically generated from bsta.1.conf
+
+ScriptAlias ###CONF_CGI_2WORDS; ###CONF_BIN_2WORDS;
+ScriptAlias ###CONF_CGI_ATTACH; ###CONF_BIN_ATTACH;
+ScriptAlias ###CONF_CGI_BBCODE; ###CONF_BIN_BBCODE;
+ScriptAlias ###CONF_CGI_COIN; ###CONF_BIN_COIN;
+ScriptAlias ###CONF_CGI_FRAME; ###CONF_BIN_FRAME;
+ScriptAlias ###CONF_CGI_GOTO; ###CONF_BIN_GOTO;
+ScriptAlias ###CONF_CGI_INFO; ###CONF_BIN_INFO;
+ScriptAlias ###CONF_CGI_VIEWER; ###CONF_BIN_VIEWER;
+
+<Directory ###CONF_BIN;>
+ Require all granted
+</Directory>
--- /dev/null
+# bsta.cron is automatically generated from bsta.1.cron
+
+###CRON_OLDLOGS_SCHEDULE; ###CRON_USER; ###CRON_OLDLOGS; ###CRON_LOG; ###CRON_LOG_SIZE_LIMIT; ###CRON_LOGS_TOTAL; ###CRON_LOGS_UNCOMPRESSED;
+###CRON_ONG_SCHEDULE; ###CRON_USER; ###CRON_ONG; >> ###CRON_ONG_LOG;
+###CRON_RESET_SCHEDULE; ###CRON_USER; ###CRON_RESET;
# bsta_lib.pm is generated from bsta_lib.1.pm
-# 22.09.2022
#
# Library of functions
#
-# Copyright (C) 2016-2017, 2019-2020, 2022 Balthasar Szczepański
+# Copyright (C) 2016, 2017, 2019, 2020, 2022, 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/>.
package bsta_lib;
'/?' => '[/unknown!]',
};
-$VERSION = 0.000002;
-@ISA = qw(Exporter);
-@EXPORT = ();
-@EXPORT_OK = qw(entityencode failpage gethttpheader getcgi urldecode readdatafile writedatafile printdatafile printdatafileht urlencode linehtml bb2ht bb2bb);
-%EXPORT_TAGS = ();
+###PERL_EXPORT_VERSION: our $VERSION = 'x.x.x';
+our @ISA = qw(Exporter);
+our @EXPORT = ();
+our @EXPORT_OK = qw(entityencode failpage gethttpheader getcgi urldecode readdatafile writedatafile printdatafile printdatafileht urlencode linehtml bb2ht bb2bb);
+our %EXPORT_TAGS = ();
# Function to show an error page
# arguments: 1 - header fields, 2 - page title, 3 - error message, 4 method
+++ /dev/null
-// chat.c is generated from chat.1.c
-// 13.11.2016
-//
-// This is the wrapper for chat.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2016 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###CHAT_PL;
-###CHAT_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(CHAT_PL_ERRLOG,"at",stderr);
- return execve(CHAT_PL,argv,envp);
-}
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# /bsta/coin
# chat.pl is generated from chat.1.pl.
-# 11.01.2017
#
# The coincidence interface
#
-# Copyright (C) 2016-2017 Balthasar Szczepański
+# Copyright (C) 2016, 2017, 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 urlencode);
use File::Copy;
-###LOGO_PATH;
-###FAVICON_PATH;
-###COIN_PATH;
-###CHAT_PATH;
-###WEBSITE_NAME;
-###FAVICON_PATH;
-###CSS_PATH;
-###LOGO_PATH;
-###WEBSITE;
-###COINCIDENCE_PATH;
-###CGI_PATH;
+###PERL_CGI_PATH: CGI_PATH = /bsta/
+###PERL_CGI_COIN_PATH: CGI_COIN_PATH = /bsta/coin
+###PERL_CGI_CSS_PATH: CGI_CSS_PATH = /bsta/bsta.css
+###PERL_CGI_LOGO_PATH: CGI_LOGO_PATH = /bsta/botmlogo.png
+
+###PERL_DATA_CHAT_PATH: DATA_CHAT_PATH = /botm/data/bsta/chat
+###PERL_DATA_COIN_PATH: DATA_COIN_PATH = /botm/data/bsta/coincidence
+
+###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 $lastid;
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;
$password=$cgi{'p'};
}
-%coin=readdatafile(COIN_PATH);
+%coin=readdatafile(DATA_COIN_PATH);
if($password eq $coin{'password'}){
$passwordOK = 1;
}
if($page < 0) {
- if (open ($chatfile,"+<",CHAT_PATH)){
+ if (open ($chatfile,"+<",DATA_CHAT_PATH)){
if (flock($chatfile,2)) {
%chat=readdatafile($chatfile);
writedatafile($chatfile,%chat);
}
elsif ($chatstate > 1) {
- writedatafile(CHAT_PATH.$chatid,%chat);
+ writedatafile(DATA_CHAT_PATH.$chatid,%chat);
my %newchat;
$newchat{'id'}=$chatid+1;
$newchat{'state'}=0;
}
}
else {
- # %chat=readdatafile(CHAT_PATH);
+ # %chat=readdatafile(DATA_CHAT_PATH);
# $chatid=int($chat{'id'})-$page;
- %chat=readdatafile(CHAT_PATH);
+ %chat=readdatafile(DATA_CHAT_PATH);
$lastid=int($chat{'id'});
- %chat=readdatafile(CHAT_PATH.$page);
+ %chat=readdatafile(DATA_CHAT_PATH.$page);
$chatid=int($chat{'id'});
$chatstate=int($chat{'state'});
@chatlines = split(/\r?\n/,$chat{'content'});
# print "Content-type: text/plain\n\n";
-# print CHAT_PATH."\n";
+# print DATA_CHAT_PATH."\n";
# print 'state: '.$chat{'state'}."\n";
# print 'id: '.$chat{'id'}."\n\n";
# print $chat{'content'};
print '<title>Coincidence • '.WEBSITE_NAME.'</title>'."\n";
print '<meta http-equiv="Content-type" content="text/html; charset=UTF-8">'."\n";
print '<link rel="icon" type="image/png" href="'.FAVICON_PATH.'">'."\n";
-print '<link rel="stylesheet" href="'.CSS_PATH.'">'."\n";
+print '<link rel="stylesheet" href="'.CGI_CSS_PATH.'">'."\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 '<span class="br">'.entityencode($message).'</span>'."\n";
}
if ($page < 0) {
- print '<form method="post" action="'.COINCIDENCE_PATH.'">'."\n";
+ print '<form method="post" action="'.CGI_COIN_PATH.'">'."\n";
if ($passwordOK) {
print '<input class="intxc" type="text" name="words">'."\n";
print '<input class="inbt" type="submit" value="Send">'."\n";
print '</div>'."\n";
print '<div id="underlinks">'."\n";
-print '<a href="'.CGI_PATH.'">BSTA</a> | <a href="'.COINCIDENCE_PATH.($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Once again</a>';
+print '<a href="'.CGI_PATH.'">BSTA</a> | <a href="'.CGI_COIN_PATH.($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Once again</a>';
if ($chatid > 0) {
- print ' | <a href="'.COINCIDENCE_PATH.'/'.($chatid-1).($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Before</a>';
+ print ' | <a href="'.CGI_COIN_PATH.'/'.($chatid-1).($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Before</a>';
}
if ($chatid < $lastid) {
- print ' | <a href="'.COINCIDENCE_PATH.'/'.(($chatid < $lastid-1)?($chatid +1):'').($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Unbefore</a>';
+ print ' | <a href="'.CGI_COIN_PATH.'/'.(($chatid < $lastid-1)?($chatid +1):'').($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Unbefore</a>';
}
if ($chatid > 0) {
- print ' | <a href="'.COINCIDENCE_PATH.'/0'.($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Initially</a>';
+ print ' | <a href="'.CGI_COIN_PATH.'/0'.($passwordOK?('?p='.urlencode($coin{'password'})):'').'">Initially</a>';
}
print ' | (This interface is only a demo, a proof of concept. It is very limited. No autorefresh, no private chat, etc. For full functionality use the actual Coincidence client.)'."\n";
print "\n";
-# print CHAT_PATH."\n";
+# print DATA_CHAT_PATH."\n";
# print 'state: '.$chat{'state'}."\n";
# print 'id: '.$chat{'id'}."\n\n";
# print $chat{'content'};
--- /dev/null
+Subproject commit cc70d0da5dd780e2b7b97672cc0638fd91196ee3
+++ /dev/null
-# config.txt is generated from config.1.txt
-# 20.08.2016
-#
-# The file with the autogenerated configurations for Apache2 and crontab
-#
-# Copyright (C) 2016 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 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/>.
-#
-# ! the license is for config.1.txt, not config.txt.
-
-################################################################################
-#copy this to your Apache2 configuration,
-
-###VIEWER_ALIAS;
-###FRAME_ALIAS;
-
-################################################################################
+++ /dev/null
-# config.txt is generated from config.1.txt
-# 20.08.2016
-#
-# The file with the autogenerated configurations for Apache2 and crontab
-#
-# Copyright (C) 2016 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 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/>.
-#
-# ! the license is for config.1.txt, not config.txt.
-
-################################################################################
-#copy this to your Apache2 configuration,
-
-ScriptAlias /bsta/v /eizm/bin/bsta/viewer
-ScriptAlias /bsta/v /eizm/bin/bsta/frame
-
-################################################################################
+++ /dev/null
-#!/usr/bin/perl
-
-# configure.pl
-# 02.07.2017
-#
-# This script is called from the makefile. It reads the settings file and
-# inserts the information in the source files.
-#
-# Copyright (C) 2015-2017 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 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/>.
-
-unless ($ARGV[0]) {
- print STDERR "Configfile missing.\n";
- exit 1;
-}
-
-unless (open $configfile, "<", $ARGV[0]) {
- print STDERR "Cannot open configfile\n";
- exit 2;
-}
-
-# Read the config file, line format:
-# some_name = some value # some comment
-while (defined(my $line = <$configfile>)) {
- $line =~ s/[\r\n]//g;
- $line =~ s/#.*$//; #comment
- if ($line =~ /^[ \t]*([a-zA-Z0-9_\-\.]+)[ \t]*=[ \t]*([^ \t](.*[^ \t])?)[ \t]*$/){
- my $name=$1;
- my $value=$2;
- $set{$name}=$value;
- }
-}
-close ($configfile);
-
-# Now generate things to be inserted.
-
-$def{'GZIP_PATH'} = "use constant GZIP_PATH => '".$set{'gzip'}."';";
-$def{'LOG_PATH'} = "use constant LOG_PATH => '".$set{'log_path'}."';";
-
-$def{'DATA_PATH'} = "use constant DATA_PATH => '".$set{'data_path'}."';";
-$def{'DEFAULT_PATH'} = "use constant DEFAULT_PATH => '".$set{'data_path'}."default';";
-$def{'SETTINGS_PATH'} = "use constant SETTINGS_PATH => '".$set{'data_path'}."settings';";
-$def{'NOACCESS_PATH'} = "use constant NOACCESS_PATH => '".$set{'data_path'}."noaccess';";
-$def{'STATE_PATH'} = "use constant STATE_PATH => '".$set{'data_path'}."state';";
-$def{'STORY_PATH'} = "use constant STORY_PATH => '".$set{'data_path'}."story';";
-$def{'CHAT_PATH'} = "use constant CHAT_PATH => '".$set{'data_path'}."chat';";
-$def{'COIN_PATH'} = "use constant COIN_PATH => '".$set{'data_path'}."coincidence';";
-$def{'LIST_PATH'} = "use constant LIST_PATH => '".$set{'data_path'}."list';";
-$def{'WWW_PATH'} = "use constant WWW_PATH => '".$set{'www_path'}."';";
-$def{'INDEX_PATH'} = "use constant INDEX_PATH => '".$set{'www_path'}."index.htm';";
-$def{'CGI_PATH'} = "use constant CGI_PATH => '".$set{'cgi_path'}."';";
-$def{'CSS_PATH'} = "use constant CSS_PATH => '".$set{'cgi_path'}."bsta.css';";
-$def{'LOGO_PATH'} = "use constant LOGO_PATH => '".$set{'cgi_path'}."botmlogo.png';";
-$def{'FRAME_PATH'} = "use constant FRAME_PATH => '".$set{'cgi_path'}."f';";
-$def{'VIEWER_PATH'} = "use constant VIEWER_PATH => '".$set{'cgi_path'}."v';";
-$def{'ATTACH_PATH'} = "use constant ATTACH_PATH => '".$set{'cgi_path'}."a';";
-$def{'INFO_PATH'} = "use constant INFO_PATH => '".$set{'cgi_path'}."i';";
-$def{'BBCODE_PATH'} = "use constant BBCODE_PATH => '".$set{'cgi_path'}."b';";
-$def{'GOTO_PATH'} = "use constant GOTO_PATH => '".$set{'cgi_path'}."g';";
-$def{'TWOWORDS_PATH'} = "use constant TWOWORDS_PATH => '".$set{'cgi_path'}."2words';";
-$def{'COINCIDENCE_PATH'} = "use constant COINCIDENCE_PATH => '".$set{'cgi_path'}."coin';";
-$def{'TIMER_PATH'} = "use constant TIMER_PATH => '".$set{'cgi_path'}."timer.js';";
-$def{'FAVICON_PATH'} = "use constant FAVICON_PATH => '".$set{'favicon_path'}."';";
-$def{'WEBSITE'} = "use constant WEBSITE => '".$set{'website'}."';";
-$def{'WEBSITE_NAME'} = "use constant WEBSITE_NAME => '".$set{'website_name'}."';";
-$def{'INTF_DATE'} = "use constant INTF_DATE => '".$set{'intf_date'}."';";
-$def{'COIN_DATE'} = "use constant COIN_DATE => '".$set{'coin_date'}."';";
-$def{'LOG_SIZE_LIMIT'} = "use constant LOG_SIZE_LIMIT => ".$set{'log_size_limit'}.";";
-$def{'LOGS_UNCOMPRESSED'} = "use constant LOGS_UNCOMPRESSED => ".$set{'logs_uncompressed'}.";";
-$def{'LOGS_TOTAL'} = "use constant LOGS_TOTAL => ".$set{'logs_total'}.";";
-$def{'STORY_LENGTH'} = "use constant STORY_LENGTH => ".int($set{'story_length'}).";";
-$def{'PAGE_LENGTH'} = "use constant PAGE_LENGTH => ".int($set{'page_length'}).";";
-$def{'FIRSTPAGE_LENGTH'} = "use constant FIRSTPAGE_LENGTH => ".int($set{'firstpage_length'}).";";
-
-$def{'VIEWER_ALIAS'} = 'ScriptAlias '.$set{'cgi_path'}.'v '.$set{'bin_path'}.'viewer';
-$def{'FRAME_ALIAS' } = 'ScriptAlias '.$set{'cgi_path'}.'v '.$set{'bin_path'}.'frame';
-
-$def{'LIB'} = "use lib '".$set{'lib_path'}."';";
-
-$def{'PATH'} = "\$ENV{'PATH'} = '".$set{'path'}."';";
-
-$def{'PERL'} = "#!".$set{'perl'};
-
-$def{'FRAME_PL'} = '#define FRAME_PL "'.$set{'bin_path'}.'frame.pl"';
-$def{'VIEWER_PL'} = '#define VIEWER_PL "'.$set{'bin_path'}.'viewer.pl"';
-$def{'ATTACH_PL'} = '#define ATTACH_PL "'.$set{'bin_path'}.'attach.pl"';
-$def{'TWOWORDS_PL'} = '#define TWOWORDS_PL "'.$set{'bin_path'}.'2words.pl"';
-$def{'CHAT_PL'} = '#define CHAT_PL "'.$set{'bin_path'}.'chat.pl"';
-$def{'INFO_PL'} = '#define INFO_PL "'.$set{'bin_path'}.'info.pl"';
-$def{'GOTO_PL'} = '#define GOTO_PL "'.$set{'bin_path'}.'goto.pl"';
-$def{'BBCODE_PL'} = '#define BBCODE_PL "'.$set{'bin_path'}.'bbcode.pl"';
-$def{'FRAME_PL_ERRLOG'} = '#define FRAME_PL_ERRLOG "'.$set{'log_path'}.'frame-stderr.log"';
-$def{'VIEWER_PL_ERRLOG'} = '#define VIEWER_PL_ERRLOG "'.$set{'log_path'}.'viewer-stderr.log"';
-$def{'ATTACH_PL_ERRLOG'} = '#define ATTACH_PL_ERRLOG "'.$set{'log_path'}.'attach-stderr.log"';
-$def{'TWOWORDS_PL_ERRLOG'} = '#define TWOWORDS_PL_ERRLOG "'.$set{'log_path'}.'2words-stderr.log"';
-$def{'CHAT_PL_ERRLOG'} = '#define CHAT_PL_ERRLOG "'.$set{'log_path'}.'chat-stderr.log"';
-$def{'INFO_PL_ERRLOG'} = '#define INFO_PL_ERRLOG "'.$set{'log_path'}.'info-stderr.log"';
-$def{'GOTO_PL_ERRLOG'} = '#define GOTO_PL_ERRLOG "'.$set{'log_path'}.'goto-stderr.log"';
-$def{'BBCODE_PL_ERRLOG'} = '#define BBCODE_PL_ERRLOG "'.$set{'log_path'}.'bbcode-stderr.log"';
-
-$def{'CC'} = 'CC='.$set{'gcc'};
-$def{'CF'} = 'CF='.$set{'c_flags'};
-$def{'PL'} = 'PL='.$set{'perl'};
-$def{'MV'} = 'MV='.$set{'mv'};
-$def{'CP'} = 'CP='.$set{'cp'};
-$def{'RM'} = 'RM='.$set{'rm'};
-$def{'OD'} = 'OD='.$set{'bin_path'};
-$def{'LD'} = 'LD='.$set{'lib_path'};
-$def{'WD'} = 'WD='.$set{'www_path'};
-$def{'CM'} = 'CM='.$set{'chmod'};
-
-
-# Now go through input file, find lines to be replaced. Format:
-# ###SOME_NAME;
-# If found - replace.
-
-while (defined($line = <STDIN>)) {
- $line =~ s/[\r\n]//g;
- if ($line =~ /###([a-zA-Z0-9_]+);/) {
- print "$def{$1}\n";
- }
- else {
- print "$line\n";
- }
-}
--- /dev/null
+Subproject commit 92cf35c0340afcadb39f06248de26e114ad5603c
+++ /dev/null
-// frame.c is generated from frame.1.c
-// 21.08.2016
-//
-// This is the wrapper for frame.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2016 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###FRAME_PL;
-###FRAME_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(FRAME_PL_ERRLOG,"at",stderr);
- return execve(FRAME_PL,argv,envp);
-}
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# /bsta/f
# viewer.pl is generated from viewer.1.pl.
-# 19.10.2016
#
# The frame interface
#
-# Copyright (C) 2016 Balthasar Szczepañski
+# Copyright (C) 2016, 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 readdatafile);
-###SETTINGS_PATH;
-###DEFAULT_PATH;
-###DATA_PATH;
-###STATE_PATH;
-###NOACCESS_PATH;
+###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta
+###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
+###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
my %http;
my %cgi;
my @fileinfo;
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;
$password='';
}
-%settings=readdatafile(SETTINGS_PATH);
-%default=readdatafile(DEFAULT_PATH);
-%state=readdatafile(STATE_PATH);
+%settings=readdatafile(DATA_SETTINGS_PATH);
+%default=readdatafile(DATA_DEFAULT_PATH);
+%state=readdatafile(DATA_STATE_PATH);
if($frame<0) {
$frame = $state{'last'} + $frame +1;
}
$passwordOK = 0;
}
-if ($passwordOK || (int($state{'state'}) >= 1 && $frame <= int($state{'last'}) && $frame > 0)) {
+if ($passwordOK || (int($state{'state'}) >= 1 && $frame <= int($state{'last'}) && $frame >= 0)) {
$access=1;
}
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};
+++ /dev/null
-// info.c is generated from info.1.c
-// 29.06.2017
-//
-// This is the wrapper for info.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2017 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###GOTO_PL;
-###GOTO_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(GOTO_PL_ERRLOG,"at",stderr);
- return execve(GOTO_PL,argv,envp);
-}
-###PERL;
+###RUN_PERL: #!/usr/bin/perl
#
# /bsta/g
-# goto.pl is generated from goto.1.pl.
-# 02.07.2017
-#
+###RUN_PERL: #!/usr/bin/perl
+
# The frame list
#
-# Copyright (C) 2017 Balthasar Szczepański
+# Copyright (C) 2017, 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 readdatafile printdatafile entityencode urlencode);
use File::Copy;
-###DATA_PATH;
-###SETTINGS_PATH;
-###STATE_PATH;
-###LIST_PATH;
-###WEBSITE_NAME;
-###FAVICON_PATH;
-###CSS_PATH;
-###LOGO_PATH;
-###WEBSITE;
-###CGI_PATH;
-###VIEWER_PATH;
+###PERL_CGI_PATH: CGI_PATH = /bsta/
+###PERL_CGI_CSS_PATH: CGI_CSS_PATH = /bsta/bsta.css
+###PERL_CGI_LOGO_PATH: CGI_LOGO_PATH = /bsta/botmlogo.png
+###PERL_CGI_VIEWER_PATH: CGI_VIEWER_PATH = /bsta/v
+
+###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta/
+###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
+###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
+###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
+###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 $line;
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;
$password='';
}
-%settings=readdatafile(SETTINGS_PATH);
-%state=readdatafile(STATE_PATH);
-%gotolist=readdatafile(LIST_PATH);
+%settings=readdatafile(DATA_SETTINGS_PATH);
+%state=readdatafile(DATA_STATE_PATH);
+%gotolist=readdatafile(DATA_LIST_PATH);
if($password eq $settings{'password'}){
$passwordOK = 1;
print '<title>GOTO • '.entityencode($settings{'story'}).' • '.WEBSITE_NAME.'</title>'."\n";
print '<meta http-equiv="Content-type" content="text/html; charset=UTF-8">'."\n";
print '<link rel="icon" type="image/png" href="'.FAVICON_PATH.'">'."\n";
-print '<link rel="stylesheet" href="'.CSS_PATH.'">'."\n";
+print '<link rel="stylesheet" href="'.CGI_CSS_PATH.'">'."\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";
}
@timetab=gmtime($ongtime);
- print '<span class="'.(($frame==$last && int($state{'state'}<2))?'ni':'br').'">'.sprintf('%03d',$frame).'</span> '.sprintf('%02d.%02d.%02d %02d:%02d',$timetab[3],$timetab[4]+1,$timetab[5]-100,$timetab[2],$timetab[1]).' <a href="'.VIEWER_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'').'">'.entityencode($title).'</a><br>'."\n";
+ print '<span class="'.(($frame==$last && int($state{'state'}<2))?'ni':'br').'">'.sprintf('%03d',$frame).'</span> '.sprintf('%02d.%02d.%02d %02d:%02d',$timetab[3],$timetab[4]+1,$timetab[5]-100,$timetab[2],$timetab[1]).' <a href="'.CGI_VIEWER_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'').'">'.entityencode($title).'</a><br>'."\n";
}
print '</div>'."\n";
+++ /dev/null
-// info.c is generated from info.1.c
-// 02.02.2017
-//
-// This is the wrapper for info.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2017 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###INFO_PL;
-###INFO_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(INFO_PL_ERRLOG,"at",stderr);
- return execve(INFO_PL,argv,envp);
-}
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# /bsta/i
# info.pl is generated from info.1.pl.
-# 05.06.2017
#
# The frame/story info interface
#
-# Copyright (C) 2017 Balthasar Szczepański
+# Copyright (C) 2017, 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 readdatafile printdatafile);
use File::Copy;
-###DATA_PATH;
-###DEFAULT_PATH;
-###SETTINGS_PATH;
-###STATE_PATH;
-###NOACCESS_PATH;
+###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta
+###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
+###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
my %http;
my %cgi;
my $seconds;
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;
$password='';
}
-%settings=readdatafile(SETTINGS_PATH);
-%default=readdatafile(DEFAULT_PATH);
+%settings=readdatafile(DATA_SETTINGS_PATH);
+%default=readdatafile(DATA_DEFAULT_PATH);
%framedata=readdatafile(DATA_PATH.$frame);
-%state=readdatafile(STATE_PATH);
+%state=readdatafile(DATA_STATE_PATH);
if($password eq $settings{'password'}){
$passwordOK = 1;
}
}
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};
+++ /dev/null
-#!/bin/sh
-
-# make.sh
-# 13.01.2016
-#
-# This is the script for making the software. Normally, the makefile is used for
-# this purpose. But the makefile has to be generated first.
-# This script generates the makefile and then uses it and finally removes it.
-#
-# Copyright (C) 2015-2016 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 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/>.
-
-set -x
-perl configure.pl settings <makefile.1.mak >makefile
-make
-# rm makefile
-# makefile is generated from makefile.1.mak.
-# 2.07.2017
+# "makefile" is automatically generated from "makefile.1.mak"
+#
+# Copyright (C) 2016, 2017, 2023 Balthasar Szczepański
#
-# This is the makefile
+# 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.
#
-# Copyright (C) 2016 - 2017 Balthasar Szczepañski
+# 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 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.
-#
-# 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/>.
-
-CC=/usr/bin/gcc
-CF=-g -Wall
-PL=/usr/bin/perl
-CP=/bin/cp
-MV=/bin/mv
-RM=/bin/rm
-CM=/bin/chmod
-OD=/eizm/bin/bsta/
-LD=/eizm/lib/bsta/
-WD=/eizm/www/time/bsta/
-
-all: moveout copyoutwww moveoutlib remove config.txt
-
-moveout: viewer viewer.pl frame frame.pl 2words 2words.pl chat chat.pl ong.pl updlist.pl oldlogs.pl attach attach.pl info info.pl goto goto.pl bbcode bbcode.pl setuid exec
- $(MV) viewer viewer.pl frame frame.pl 2words 2words.pl chat chat.pl ong.pl updlist.pl oldlogs.pl attach attach.pl info info.pl goto goto.pl bbcode bbcode.pl $(OD)
-
-copyout: setuid exec
-# $(CP) access.pl $(OD)
-
-copyoutwww: timer.js bsta.css setuid exec
- $(CP) timer.js bsta.css $(WD)
-
-
-moveoutlib: bsta_lib.pm setuid exec
- $(MV) bsta_lib.pm $(LD)
-
-setuid: viewer frame 2words attach chat info goto bbcode
- $(CM) u+s viewer frame 2words attach chat info goto bbcode
-
-exec: viewer.pl frame.pl 2words.pl ong.pl updlist.pl oldlogs.pl attach.pl chat.pl info.pl goto.pl bbcode.pl
- $(CM) +x viewer.pl frame.pl 2words.pl ong.pl updlist.pl oldlogs.pl attach.pl chat.pl info.pl goto.pl bbcode.pl
-
-remove: viewer.c frame.c 2words.c chat.c attach.c info.c goto.c bbcode.c copyout moveout setuid exec
- $(RM) viewer.c frame.c 2words.c chat.c attach.c info.c goto.c bbcode.c
-
-
-bsta_lib.pm: bsta_lib.1.pm configure.pl settings
- $(PL) configure.pl settings <bsta_lib.1.pm >bsta_lib.pm
-
-
-viewer: viewer.c
- $(CC) $(CF) -o viewer viewer.c
-
-viewer.c: viewer.1.c configure.pl settings
- $(PL) configure.pl settings <viewer.1.c >viewer.c
-
-viewer.pl: viewer.1.pl configure.pl settings
- $(PL) configure.pl settings <viewer.1.pl >viewer.pl
-
-
-frame: frame.c
- $(CC) $(CF) -o frame frame.c
-
-frame.c: frame.1.c configure.pl settings
- $(PL) configure.pl settings <frame.1.c >frame.c
-
-frame.pl: frame.1.pl configure.pl settings
- $(PL) configure.pl settings <frame.1.pl >frame.pl
-
-
-2words: 2words.c
- $(CC) $(CF) -o 2words 2words.c
-
-2words.c: 2words.1.c configure.pl settings
- $(PL) configure.pl settings <2words.1.c >2words.c
-
-2words.pl: 2words.1.pl configure.pl settings
- $(PL) configure.pl settings <2words.1.pl >2words.pl
-
-
-attach: attach.c
- $(CC) $(CF) -o attach attach.c
-
-attach.c: attach.1.c configure.pl settings
- $(PL) configure.pl settings <attach.1.c >attach.c
-
-attach.pl: attach.1.pl configure.pl settings
- $(PL) configure.pl settings <attach.1.pl >attach.pl
-
-
-chat: chat.c
- $(CC) $(CF) -o chat chat.c
-
-chat.c: chat.1.c configure.pl settings
- $(PL) configure.pl settings <chat.1.c >chat.c
-
-chat.pl: chat.1.pl configure.pl settings
- $(PL) configure.pl settings <chat.1.pl >chat.pl
-
-
-info: info.c
- $(CC) $(CF) -o info info.c
-
-info.c: info.1.c configure.pl settings
- $(PL) configure.pl settings <info.1.c >info.c
-
-info.pl: info.1.pl configure.pl settings
- $(PL) configure.pl settings <info.1.pl >info.pl
+# 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/>.
+
+DEFAULT_TARGET = debug
+ifndef TARGET
+TARGET = debug
+# when want to change target run this first:
+# make -B TARGET=target_name makefile
+endif
+PERL = perl
+
+CC =/usr/bin/gcc
+CF =-g -Wall
+
+CHMOD=/usr/bin/chmod
+CP =/usr/bin/cp
+MKDIR=/usr/bin/mkdir
+PERL =/usr/bin/perl
+RM =/usr/bin/rm
+SUDO =/usr/bin/sudo
+
+BIN_PATH = /botm/bin/test-bsta
+DATA_PATH = /botm/data/test-bsta
+LIB_PATH = /botm/lib/test-bsta
+LOG_PATH = /botm/log/test-bsta
+TMP_PATH = /botm/tmp/test-bsta
+WWW_PATH = /botm/www/1190/bstatest
+
+CONF = /botm/etc/www/conf/1190/test-bsta.conf
+CRON = /etc/cron.d/test-bsta
+
+CONFIGFILE = settings-$(TARGET).txt settings.txt
+DEFAULT_CONFIGFILE = settings-$(DEFAULT_TARGET).txt settings.txt
+
+# The configuration tool
+CONFIGURE_CMD = $(PERL) ./configure.pl $(CONFIGFILE)
+
+# keep these 2 lists in the same order!:
+GENERATE_FROM=\
+2words.1.pl\
+attach.1.pl\
+bbcode.1.pl\
+bsta.1.conf\
+bsta.1.cron\
+bsta_lib.1.pm\
+chat.1.pl\
+frame.1.pl\
+goto.1.pl\
+info.1.pl\
+oldlogs.1.pl\
+ong.1.pl\
+reset.1.pl\
+updlist.1.pl\
+viewer.1.pl
+
+TO_GENERATE=\
+2words.pl\
+attach.pl\
+bbcode.pl\
+bsta.conf\
+bsta.cron\
+bsta_lib.pm\
+chat.pl\
+frame.pl\
+goto.pl\
+info.pl\
+oldlogs.pl\
+ong.pl\
+reset.pl\
+updlist.pl\
+viewer.pl
+
+DIR=\
+$(BIN_PATH)\
+$(DATA_PATH)\
+$(LIB_PATH)\
+$(LOG_PATH)\
+$(TMP_PATH)\
+$(WWW_PATH)
+
+HIDDEN_DIR=\
+$(DATA_PATH)\
+$(TMP_PATH)
+
+SETUID=\
+2words\
+bbcode\
+attach\
+chat\
+frame\
+goto\
+info\
+viewer
+
+EXEC=\
+2words.pl\
+attach.pl\
+bbcode.pl\
+chat.pl\
+frame.pl\
+goto.pl\
+info.pl\
+oldlogs.pl\
+ong.pl\
+reset.pl\
+updlist.pl\
+viewer.pl
+
+PERL_WRAP_EXEC=\
+2words\
+attach\
+bbcode\
+chat\
+frame\
+goto\
+info\
+viewer
+
+BIN=\
+$(EXEC)\
+$(PERL_WRAP_EXEC)
+
+LIB=\
+bsta_lib.pm
+
+WWW=\
+botmlogo.png\
+bsta.css\
+timer.js
+
+
+all: $(BIN) setuid exec
+
+makefile: makefile.1.mak $(CONFIGFILE) configure.pl
+ $(CONFIGURE_CMD) < makefile.1.mak > makefile
+
+configure.pl: $(CONFIGFILE) config/configure.1.pl
+ $(PERL) config/configure.1.pl target=direct settings-$(TARGET).txt config/settings.txt --in config/configure.1.pl --out configure.pl
+
+$(TO_GENERATE): $(GENERATE_FROM) $(CONFIGFILE) configure.pl
+ $(CONFIGURE_CMD) --in $(GENERATE_FROM) --out $(TO_GENERATE)
+
+$(PERL_WRAP_EXEC): %: exec/exec.c exec/settings.txt configure.pl
+ $(PERL) configure.pl path=$(BIN_PATH) target=$*.pl io_path=$(LOG_PATH) stderr=$*-stderr.log exec/settings.txt --in exec/exec.c --out $*.c
+ $(CC) $(CF) -o $@ $*.c
+
+exec: $(EXEC)
+ $(CHMOD) +x $(EXEC)
+
+wrap_exec:
-goto: goto.c
- $(CC) $(CF) -o goto goto.c
-
-goto.c: goto.1.c configure.pl settings
- $(PL) configure.pl settings <goto.1.c >goto.c
-
-goto.pl: goto.1.pl configure.pl settings
- $(PL) configure.pl settings <goto.1.pl >goto.pl
+setuid: $(SETUID)
+ $(CHMOD) u+s,g+s $(SETUID)
-bbcode: bbcode.c
- $(CC) $(CF) -o bbcode bbcode.c
+mktree:
+ $(MKDIR) -p $(DIR)
+ $(CHMOD) g-r,g-w,g-x,o-r,o-w,o-x $(HIDDEN_DIR)
-bbcode.c: bbcode.1.c configure.pl settings
- $(PL) configure.pl settings <bbcode.1.c >bbcode.c
+ifdef BIN_PATH
+cp_bin: $(BIN) setuid exec | mktree
+ $(RM) -f $(BIN_PATH)/*
+ $(CP) -p $(BIN) $(BIN_PATH)
+endif
-bbcode.pl: bbcode.1.pl configure.pl settings
- $(PL) configure.pl settings <bbcode.1.pl >bbcode.pl
+ifdef LIB_PATH
+cp_lib: $(LIB) | mktree
+ $(RM) -f $(LIB_PATH)/*
+ $(CP) -p $(LIB) $(LIB_PATH)
+endif
+cp_www:
+ $(CP) -p $(WWW) $(WWW_PATH)
-ong.pl: ong.1.pl configure.pl settings
- $(PL) configure.pl settings <ong.1.pl >ong.pl
+cp_conf: bsta.conf
+ $(CP) bsta.conf $(CONF)
-updlist.pl: updlist.1.pl configure.pl settings
- $(PL) configure.pl settings <updlist.1.pl >updlist.pl
+cp_cron: bsta.cron
+ $(SUDO) $(CP) bsta.cron $(CRON)
-oldlogs.pl: oldlogs.1.pl configure.pl settings
- $(PL) configure.pl settings <oldlogs.1.pl >oldlogs.pl
+install: all cp_bin cp_lib cp_www cp_conf cp_cron
+clean:
+ $(RM) -f configure.pl $(TO_GENERATE) $(PERL_WRAP_EXEC) $(PERL_WRAP_EXEC:=.c)
+ $(PERL) config/configure.1.pl $(DEFAULT_CONFIGFILE) < makefile.1.mak > makefile
-config.txt: config.1.txt configure.pl settings
- $(PL) configure.pl settings <config.1.txt >config.txt
+PHONY: all clean install setuid exec mktree cp_bin cp_lib cp_www cp_conf cp_cron
-# makefile is generated from makefile.1.mak.
-# 2.07.2017
+# "makefile" is automatically generated from "makefile.1.mak"
+#
+# Copyright (C) 2016, 2017, 2023 Balthasar Szczepański
#
-# This is the makefile
+# 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.
#
-# Copyright (C) 2016 - 2017 Balthasar Szczepañski
+# 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 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.
-#
-# 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/>.
-
-###CC;
-###CF;
-###PL;
-###CP;
-###MV;
-###RM;
-###CM;
-###OD;
-###LD;
-###WD;
-
-all: moveout copyoutwww moveoutlib remove config.txt
-
-moveout: reset.pl viewer viewer.pl frame frame.pl 2words 2words.pl chat chat.pl ong.pl updlist.pl oldlogs.pl attach attach.pl info info.pl goto goto.pl bbcode bbcode.pl setuid exec
- $(MV) reset.pl viewer viewer.pl frame frame.pl 2words 2words.pl chat chat.pl ong.pl updlist.pl oldlogs.pl attach attach.pl info info.pl goto goto.pl bbcode bbcode.pl $(OD)
-
-copyout: setuid exec
-# $(CP) access.pl $(OD)
-
-copyoutwww: timer.js bsta.css setuid exec
- $(CP) timer.js bsta.css $(WD)
-
-
-moveoutlib: bsta_lib.pm setuid exec
- $(MV) bsta_lib.pm $(LD)
-
-setuid: viewer frame 2words attach chat info goto bbcode
- $(CM) u+s viewer frame 2words attach chat info goto bbcode
-
-exec: reset.pl viewer.pl frame.pl 2words.pl ong.pl updlist.pl oldlogs.pl attach.pl chat.pl info.pl goto.pl bbcode.pl
- $(CM) +x reset.pl viewer.pl frame.pl 2words.pl ong.pl updlist.pl oldlogs.pl attach.pl chat.pl info.pl goto.pl bbcode.pl
-
-remove: viewer.c frame.c 2words.c chat.c attach.c info.c goto.c bbcode.c copyout moveout setuid exec
- $(RM) viewer.c frame.c 2words.c chat.c attach.c info.c goto.c bbcode.c
-
-
-bsta_lib.pm: bsta_lib.1.pm configure.pl settings
- $(PL) configure.pl settings <bsta_lib.1.pm >bsta_lib.pm
-
-
-viewer: viewer.c
- $(CC) $(CF) -o viewer viewer.c
-
-viewer.c: viewer.1.c configure.pl settings
- $(PL) configure.pl settings <viewer.1.c >viewer.c
-
-viewer.pl: viewer.1.pl configure.pl settings
- $(PL) configure.pl settings <viewer.1.pl >viewer.pl
-
-
-frame: frame.c
- $(CC) $(CF) -o frame frame.c
-
-frame.c: frame.1.c configure.pl settings
- $(PL) configure.pl settings <frame.1.c >frame.c
-
-frame.pl: frame.1.pl configure.pl settings
- $(PL) configure.pl settings <frame.1.pl >frame.pl
-
-
-2words: 2words.c
- $(CC) $(CF) -o 2words 2words.c
-
-2words.c: 2words.1.c configure.pl settings
- $(PL) configure.pl settings <2words.1.c >2words.c
-
-2words.pl: 2words.1.pl configure.pl settings
- $(PL) configure.pl settings <2words.1.pl >2words.pl
-
-
-attach: attach.c
- $(CC) $(CF) -o attach attach.c
-
-attach.c: attach.1.c configure.pl settings
- $(PL) configure.pl settings <attach.1.c >attach.c
-
-attach.pl: attach.1.pl configure.pl settings
- $(PL) configure.pl settings <attach.1.pl >attach.pl
-
-
-chat: chat.c
- $(CC) $(CF) -o chat chat.c
-
-chat.c: chat.1.c configure.pl settings
- $(PL) configure.pl settings <chat.1.c >chat.c
-
-chat.pl: chat.1.pl configure.pl settings
- $(PL) configure.pl settings <chat.1.pl >chat.pl
-
-
-info: info.c
- $(CC) $(CF) -o info info.c
-
-info.c: info.1.c configure.pl settings
- $(PL) configure.pl settings <info.1.c >info.c
-
-info.pl: info.1.pl configure.pl settings
- $(PL) configure.pl settings <info.1.pl >info.pl
-
-
-goto: goto.c
- $(CC) $(CF) -o goto goto.c
-
-goto.c: goto.1.c configure.pl settings
- $(PL) configure.pl settings <goto.1.c >goto.c
-
-goto.pl: goto.1.pl configure.pl settings
- $(PL) configure.pl settings <goto.1.pl >goto.pl
-
-
-bbcode: bbcode.c
- $(CC) $(CF) -o bbcode bbcode.c
-
-bbcode.c: bbcode.1.c configure.pl settings
- $(PL) configure.pl settings <bbcode.1.c >bbcode.c
-
-bbcode.pl: bbcode.1.pl configure.pl settings
- $(PL) configure.pl settings <bbcode.1.pl >bbcode.pl
-
-
-ong.pl: ong.1.pl configure.pl settings
- $(PL) configure.pl settings <ong.1.pl >ong.pl
-
-updlist.pl: updlist.1.pl configure.pl settings
- $(PL) configure.pl settings <updlist.1.pl >updlist.pl
-
-oldlogs.pl: oldlogs.1.pl configure.pl settings
- $(PL) configure.pl settings <oldlogs.1.pl >oldlogs.pl
-
-reset.pl: reset.1.pl configure.pl settings
- $(PL) configure.pl settings <reset.1.pl >reset.pl
-
-
-
-config.txt: config.1.txt configure.pl settings
- $(PL) configure.pl settings <config.1.txt >config.txt
+# 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/>.
+
+DEFAULT_TARGET = debug
+ifndef TARGET
+TARGET = $(DEFAULT_TARGET) ###MAKE_TARGET:
+# when want to change target run this first:
+# make -B TARGET=target_name makefile
+endif
+PERL = perl
+
+###MAKE_CC: CC=gcc
+###MAKE_CF: CF=-g -Wall
+
+###MAKE_CHMOD: CHMOD = chmod
+###MAKE_CP: CP = cp
+###MAKE_MKDIR: MKDIR = mkdir
+###MAKE_PERL: PERL = perl
+###MAKE_RM: RM = rm
+###MAKE_SUDO: SUDO = sudo
+
+###MAKE_BIN_PATH: BIN_PATH = /botm/bin/bsta
+###MAKE_DATA_PATH: DATA_PATH = /botm/data/bsta
+###MAKE_LIB_PATH: LIB_PATH = /botm/lib/bsta
+###MAKE_LOG_PATH: LOG_PATH = /botm/log/bsta
+###MAKE_TMP_PATH: TMP_PATH = /botm/tmp/bsta
+###MAKE_WWW_PATH: WWW_PATH = /botm/www/1190/bsta
+
+###MAKE_CONF: CONF = /botm/etc/www/conf/1190/bsta.conf
+###MAKE_CRON: CRON = /etc/cron.d/bsta
+
+CONFIGFILE = settings-$(TARGET).txt settings.txt
+DEFAULT_CONFIGFILE = settings-$(DEFAULT_TARGET).txt settings.txt
+
+# The configuration tool
+CONFIGURE_CMD = $(PERL) ./configure.pl $(CONFIGFILE)
+
+# keep these 2 lists in the same order!:
+GENERATE_FROM=\
+2words.1.pl\
+attach.1.pl\
+bbcode.1.pl\
+bsta.1.conf\
+bsta.1.cron\
+bsta_lib.1.pm\
+chat.1.pl\
+frame.1.pl\
+goto.1.pl\
+info.1.pl\
+oldlogs.1.pl\
+ong.1.pl\
+reset.1.pl\
+updlist.1.pl\
+viewer.1.pl
+
+TO_GENERATE=\
+2words.pl\
+attach.pl\
+bbcode.pl\
+bsta.conf\
+bsta.cron\
+bsta_lib.pm\
+chat.pl\
+frame.pl\
+goto.pl\
+info.pl\
+oldlogs.pl\
+ong.pl\
+reset.pl\
+updlist.pl\
+viewer.pl
+
+DIR=\
+$(BIN_PATH)\
+$(DATA_PATH)\
+$(LIB_PATH)\
+$(LOG_PATH)\
+$(TMP_PATH)\
+$(WWW_PATH)
+
+HIDDEN_DIR=\
+$(DATA_PATH)\
+$(TMP_PATH)
+
+SETUID=\
+2words\
+bbcode\
+attach\
+chat\
+frame\
+goto\
+info\
+viewer
+
+EXEC=\
+2words.pl\
+attach.pl\
+bbcode.pl\
+chat.pl\
+frame.pl\
+goto.pl\
+info.pl\
+oldlogs.pl\
+ong.pl\
+reset.pl\
+updlist.pl\
+viewer.pl
+
+PERL_WRAP_EXEC=\
+2words\
+attach\
+bbcode\
+chat\
+frame\
+goto\
+info\
+viewer
+
+BIN=\
+$(EXEC)\
+$(PERL_WRAP_EXEC)
+
+LIB=\
+bsta_lib.pm
+
+WWW=\
+botmlogo.png\
+bsta.css\
+timer.js
+
+
+all: $(BIN) setuid exec
+
+makefile: makefile.1.mak $(CONFIGFILE) configure.pl
+ $(CONFIGURE_CMD) < makefile.1.mak > makefile
+
+configure.pl: $(CONFIGFILE) config/configure.1.pl
+ $(PERL) config/configure.1.pl target=direct settings-$(TARGET).txt config/settings.txt --in config/configure.1.pl --out configure.pl
+
+$(TO_GENERATE): $(GENERATE_FROM) $(CONFIGFILE) configure.pl
+ $(CONFIGURE_CMD) --in $(GENERATE_FROM) --out $(TO_GENERATE)
+
+$(PERL_WRAP_EXEC): %: exec/exec.c exec/settings.txt configure.pl
+ $(PERL) configure.pl path=$(BIN_PATH) target=$*.pl io_path=$(LOG_PATH) stderr=$*-stderr.log exec/settings.txt --in exec/exec.c --out $*.c
+ $(CC) $(CF) -o $@ $*.c
+
+exec: $(EXEC)
+ $(CHMOD) +x $(EXEC)
+
+wrap_exec:
+
+setuid: $(SETUID)
+ $(CHMOD) u+s,g+s $(SETUID)
+
+
+mktree:
+ $(MKDIR) -p $(DIR)
+ $(CHMOD) g-r,g-w,g-x,o-r,o-w,o-x $(HIDDEN_DIR)
+
+ifdef BIN_PATH
+cp_bin: $(BIN) setuid exec | mktree
+ $(RM) -f $(BIN_PATH)/*
+ $(CP) -p $(BIN) $(BIN_PATH)
+endif
+
+ifdef LIB_PATH
+cp_lib: $(LIB) | mktree
+ $(RM) -f $(LIB_PATH)/*
+ $(CP) -p $(LIB) $(LIB_PATH)
+endif
+
+cp_www:
+ $(CP) -p $(WWW) $(WWW_PATH)
+
+cp_conf: bsta.conf
+ $(CP) bsta.conf $(CONF)
+
+cp_cron: bsta.cron
+ $(SUDO) $(CP) bsta.cron $(CRON)
+
+install: all cp_bin cp_lib cp_www cp_conf cp_cron
+
+clean:
+ $(RM) -f configure.pl $(TO_GENERATE) $(PERL_WRAP_EXEC) $(PERL_WRAP_EXEC:=.c)
+ $(PERL) config/configure.1.pl $(DEFAULT_CONFIGFILE) < makefile.1.mak > makefile
+
+PHONY: all clean install setuid exec mktree cp_bin cp_lib cp_www cp_conf cp_cron
-###PERL;
+###RUN_PERL: #!/usr/bin/perl
# oldlogs is generated from oldlogs.1.pl.
-# 02.01.2016
#
# This script renames log files if they are big enough.
# Compresses or removes older log files.
#
-# Copyright (C) 2015-2016 Balthasar Szczepański
+# Copyright (C) 2015, 2016, 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/>.
-###GZIP_PATH;
-###LOG_PATH;
-###LOG_SIZE_LIMIT;
-###LOGS_TOTAL;
-###LOGS_UNCOMPRESSED;
+###PERL_GZIP: GZIP = gzip
+###PERL_LOG_PATH: LOG_PATH = /botm/log/bsta/
+###PERL_LOG_SIZE_LIMIT: LOG_SIZE_LIMIT = 65536
+###PERL_LOGS_UNCOMPRESSED: LOGS_UNCOMPRESSED = 2
+###PERL_LOGS_TOTAL: LOGS_TOTAL = 10
+
if ($ARGV[0] ne '') {
$log_path = $ARGV[0];
my $thispath;
my $nextpath;
my $nextnumber=$number+1;
- my @gzip_arg = (GZIP_PATH, '-q', '-9','-f');
+ my @gzip_arg = (GZIP, '-q', '-9','-f');
$thispath = $path.(($number != 0)?'.'.$number.($gz?'.gz':''):'');
if ($number == $logs_total) {
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# ong.pl is generated from ong.1.pl.
-# 29.06.2017
#
# The ONG bot
#
-# Copyright (C) 2016-2017 Balthasar Szczepański
+# Copyright (C) 2016, 2017, 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(entityencode readdatafile writedatafile urlencode);
use File::Copy;
-###DATA_PATH;
-###WWW_PATH;
-###SETTINGS_PATH;
-###STATE_PATH;
-###DEFAULT_PATH;
-###LIST_PATH;
+###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_WWW_PATH: WWW_PATH = /botm/www/1190/bsta/
+###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
my %framedata;
my %nextframedata;
print $time.' - '.$ongtime."\n";
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
-###PATH;
+###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
-if (open ($statefile,"+<",STATE_PATH)){
+if (open ($statefile,"+<",DATA_STATE_PATH)){
if (flock($statefile,2)) {
%state=readdatafile($statefile);
$ongstate=int($state{'state'});
print 'ongtime: '.$nextong."\n";
if($ongtime >= $nextong) {
- %settings=readdatafile(SETTINGS_PATH);
+ %settings=readdatafile(DATA_SETTINGS_PATH);
$static=int($settings{'ongtime'});
$dynamic=int($settings{'dynamicongtime'});
$last=int($settings{'last'});
if($ongstate == 2) {
print 'next frame: '.$frame."\n";
%framedata=readdatafile(DATA_PATH.$frame);
- %default=readdatafile(DEFAULT_PATH);
- %gotolist=readdatafile(LIST_PATH);
+ %default=readdatafile(DATA_DEFAULT_PATH);
+ %gotolist=readdatafile(DATA_LIST_PATH);
$framedata{'ongtime'}=$time;
$framedata{'timer'}=$dynamic;
$gotolist{'title-'.$frame}=$framedata{'title'};
$gotolist{'ongtime-'.$frame}=$framedata{'ongtime'};
writedatafile(DATA_PATH.$frame,%framedata);
- writedatafile(LIST_PATH,%gotolist);
+ writedatafile(DATA_LIST_PATH,%gotolist);
foreach my $ind (keys %default) {
unless(defined($framedata{$ind})){
+++ /dev/null
-#!/usr/bin/perl
-# 01.02.2017
-
-use strict;
-#use warnings;
-use lib '/eizm/lib/bstatest/';
-use bsta_lib qw(readdatafile writedatafile);
-
-use constant DATA_PATH => '/eizm/data/bsta/';
-use constant SETTINGS_PATH => '/eizm/data/bsta/settings';
-use constant STATE_PATH => '/eizm/data/bsta/state';
-
-my %framedata;
-my %settings;
-my %state;
-
-my $last;
-my $ongtime;
-my @timetab;
-my $timer;
-my $prevongtime;
-my $cleantimer;
-my $nicetime;
-
-%state=readdatafile(STATE_PATH);
-$last=int($state{'last'});
-
-for (my $f=$last; $f>=0; --$f) {
- %framedata=readdatafile(DATA_PATH.$f);\r $ongtime=int($framedata{'ongtime'});
- @timetab=gmtime($ongtime);
- $nicetime=sprintf('UTC %04d.%02d.%02d %02d:%02d:%02d',$timetab[5]+1900,$timetab[4]+1,$timetab[3],$timetab[2],$timetab[1],$timetab[0]);
-
- if($framedata{'timer'}ne'') {
- $timer=int($framedata{'timer'});
- $cleantimer=$timer;
- }
- # elsif($f<$last) {
- # $timer=($prevongtime-$ongtime)/3600;
- # $cleantimer=0-int($timer+0.5);
- # $framedata{'timer'}=0-$cleantimer;
- # writedatafile(DATA_PATH.$f,%framedata);
- # }
-
- print "$f\t$nicetime\t$ongtime\t\t$timer\n";
- $prevongtime=$ongtime;
-}
-for (my $f=0; $f<=$last; ++$f) {
-
-}
\ No newline at end of file
-###PERL;
-#
-# /bsta/2words
+###RUN_PERL: #!/usr/bin/perl
+
# reset is generated from reset.1.pl.
-# 26.03.2018
#
# Reset BSTA state
#
-# Copyright (C) 2016 - 2018 Balthasar Szczepański
+# Copyright (C) 2016 - 2018, 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(writedatafile);
-###STORY_PATH;
-###WEBSITE;
-###CGI_PATH;
-###INDEX_PATH;
-###INTF_DATE;
-###STATE_PATH;
-###COIN_DATE;
-###CHAT_PATH;
+###PERL_CGI_PATH: CGI_PATH = /bsta/
+
+###PERL_DATA_CHAT_PATH: DATA_CHAT_PATH = /botm/data/bsta/chat
+###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
+###PERL_DATA_STORY_PATH: DATA_STORY_PATH = /botm/data/bsta/story
+
+###PERL_WWW_INDEX_PATH: WWW_INDEX_PATH = /botm/www/1190/bsta/index.htm
+
+###PERL_WEBSITE: WEBSITE = 1190.bicyclesonthemoon.info
+
+###PERL_COIN_DATE: COIN_DATE = 13-Nov-2016 22:15
+###PERL_INTF_DATE: INTF_DATE = 28-Sep-2016 20:34
my %story = (
'id' => '0',
);
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
-###PATH;
+###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
-writedatafile(STATE_PATH,%state);
-writedatafile(STORY_PATH,%story);
-writedatafile(CHAT_PATH,%chat);
+writedatafile(DATA_STATE_PATH,%state);
+writedatafile(DATA_STORY_PATH,%story);
+writedatafile(DATA_CHAT_PATH,%chat);
-writeindex(INDEX_PATH);
+writeindex(WWW_INDEX_PATH);
#function borrowed from 2words.pl - keep consistent!
sub writeindex {
+++ /dev/null
-# settings
-# 19.11.2016
-#
-# In this file are defined values specific for the user's system
-#
-# Copyright (C) 2016 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 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/>.
-
-#all directory paths must end with '/' and must already exist.
-
-bin_path = /eizm/bin/bsta/ #Where the software will be located
-data_path = /eizm/data/bsta/ #where the software will remember data; subdir:
- #group, groupsettings
-log_path = /eizm/log/bsta/ #where the software will remember data
-tmp_path = /eizm/tmp/bsta/ #for temporary fies
-www_path = /eizm/www/time/bsta/ #for the www server
-lib_path = /eizm/lib/bsta/
-cgi_path = /bsta/
-
-path = /usr/local/bin:/usr/bin:/bin #The path environment variable. Must be
- #overwritten if SETUID. Otherwise
- #launching programs may fail. (Perl
- #security...)
-
-
-#paths to software
-perl = /usr/bin/perl
-chmod = /bin/chmod
-cp = /bin/cp
-mv = /bin/mv
-rm = /bin/rm
-gcc = /usr/bin/gcc
-gzip = /bin/gzip
-c_flags = -g -Wall
-
-log_size_limit = 65536 # How big can a log file be
-logs_uncompressed = 2 # How many uncompressed old logs to keep
-logs_total = 10 # How many old logs to keep
-
-rm_access_crontab = 10 2 * * * # How often to remove leftover unlock info.
-oldlogs_crontab = 0 2 * * * # How often to deal with old logs
-bot_crontab = 20 2 * * * # How often to run the bot
-
-website = 1190.bicyclesonthemoon.info
-website_name = Bicycles on the Moon
-favicon_path = /img/favicon.png
-intf_date = 28-Sep-2016 20:34
-coin_date = 13-Nov-2016 22:15
-
-story_length = 16
-firstpage_length = 4
-page_length = 16
+++ /dev/null
-# settings
-# 19.11.2016
-#
-# In this file are defined values specific for the user's system
-#
-# Copyright (C) 2016 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 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/>.
-
-#all directory paths must end with '/' and must already exist.
-
-bin_path = /eizm/bin/bstagain/ #Where the software will be located
-data_path = /eizm/data/bstagain/ #where the software will remember data; subdir:
- #group, groupsettings
-log_path = /eizm/log/bstagain/ #where the software will remember data
-tmp_path = /eizm/tmp/bstagain/ #for temporary fies
-www_path = /eizm/www/time/bstagain/ #for the www server
-lib_path = /eizm/lib/bstagain/
-cgi_path = /bstagain/
-
-path = /usr/local/bin:/usr/bin:/bin #The path environment variable. Must be
- #overwritten if SETUID. Otherwise
- #launching programs may fail. (Perl
- #security...)
-
-
-#paths to software
-perl = /usr/bin/perl
-chmod = /bin/chmod
-cp = /bin/cp
-mv = /bin/mv
-rm = /bin/rm
-gcc = /usr/bin/gcc
-gzip = /bin/gzip
-c_flags = -g -Wall
-
-log_size_limit = 65536 # How big can a log file be
-logs_uncompressed = 2 # How many uncompressed old logs to keep
-logs_total = 10 # How many old logs to keep
-
-rm_access_crontab = 10 2 * * * # How often to remove leftover unlock info.
-oldlogs_crontab = 0 2 * * * # How often to deal with old logs
-bot_crontab = 20 2 * * * # How often to run the bot
-
-website = 1190.bicyclesonthemoon.info
-website_name = Bicycles on the Moon
-favicon_path = /img/favicon.png
-intf_date = 28-Sep-2016 20:34
-coin_date = 13-Nov-2016 22:15
-
-story_length = 16
-firstpage_length = 4
-page_length = 16
--- /dev/null
+# In this file are defined values specific for the user's system
+
+
+# target name. settings file (THIS FILE) is "settings-TARGET_NAME.txt"
+# where TARGET_NAME is the value
+target: again
+
+name: bstagain
+
+
+# Where the software will be located
+bin_path: /botm/bin/bstagain
+
+# where the libraries will be located
+lib_path: /botm/lib/bstagain
+
+# where the software will remember data
+data_path: /botm/data/bstagain
+
+#where the software will record logs
+log_path: /botm/log/bstagain
+
+#for temporary fies
+tmp_path: /botm/tmp/bstagain
+
+#for the www server
+www_path : /botm/www/1190/bstagain
+cgi_path : /bstagain
+conf_path: /botm/etc/www/conf/1190
+
+#cron files directory
+cron_path: /etc/cron.d
+
+path: /usr/local/bin:/usr/bin:/bin
+# The path environment variable. Must be overwritten if SETUID.
+# Otherwise launching programs may fail.
+# (Perl security...)
+
+
+#paths to software
+
+chmod: /usr/bin/chmod
+cp : /usr/bin/cp
+gzip : /usr/bin/gzip
+mkdir: /usr/bin/mkdir
+mv : /usr/bin/mv
+perl : /usr/bin/perl
+rm : /usr/bin/rm
+sudo : /usr/bin/sudo
+
+CC: /usr/bin/gcc
+CF: -g -Wall
+
+
+# How big can a log file be
+log_size_limit: 65536
+
+# How many uncompressed old logs to keep
+logs_uncompressed: 2
+
+# How many old logs to keep
+logs_total: 10
+
+# When to deal with old logs
+oldlogs_schedule: 1 4 * * *
+
+# When to run the ONG bot
+ong_schedule: 0 * * * *
+
+# When to RESET EVERYTHING
+reset_schedule: 33 4 * * *
+
+cron_user: b
+
+
+website : 1190.bicyclesonthemoon.info
+website_name: Bicycles on the Moon
+favicon_path: /img/favicon.png
+intf_date : 28-Sep-2016 20:34
+coin_date : 13-Nov-2016 22:15
+
+story_length : 16
+firstpage_length: 4
+page_length : 16
--- /dev/null
+# In this file are defined values specific for the user's system
+
+
+# target name. settings file (THIS FILE) is "settings-TARGET_NAME.txt"
+# where TARGET_NAME is the value
+target: bsta
+
+name: bsta
+
+
+# Where the software will be located
+bin_path: /botm/bin/bsta
+
+# where the libraries will be located
+lib_path: /botm/lib/bsta
+
+# where the software will remember data
+data_path: /botm/data/bsta
+
+#where the software will record logs
+log_path: /botm/log/bsta
+
+#for temporary fies
+tmp_path: /botm/tmp/bsta
+
+#for the www server
+www_path : /botm/www/1190/bsta
+cgi_path : /bsta
+conf_path: /botm/etc/www/conf/1190
+
+#cron files directory
+cron_path: /etc/cron.d
+
+path: /usr/local/bin:/usr/bin:/bin
+# The path environment variable. Must be overwritten if SETUID.
+# Otherwise launching programs may fail.
+# (Perl security...)
+
+
+#paths to software
+
+chmod: /usr/bin/chmod
+cp : /usr/bin/cp
+gzip : /usr/bin/gzip
+mkdir: /usr/bin/mkdir
+mv : /usr/bin/mv
+perl : /usr/bin/perl
+rm : /usr/bin/rm
+sudo : /usr/bin/sudo
+
+CC: /usr/bin/gcc
+CF: -g -Wall
+
+
+# How big can a log file be
+log_size_limit: 65536
+
+# How many uncompressed old logs to keep
+logs_uncompressed: 2
+
+# How many old logs to keep
+logs_total: 10
+
+# When to deal with old logs
+oldlogs_schedule: 0 4 * * *
+
+# When to run the ONG bot
+ong_schedule: 0 * * * *
+
+# When to RESET EVERYTHING
+reset_schedule: #33 4 * * *
+
+cron_user: b
+
+
+website : 1190.bicyclesonthemoon.info
+website_name: Bicycles on the Moon
+favicon_path: /img/favicon.png
+intf_date : 28-Sep-2016 20:34
+coin_date : 13-Nov-2016 22:15
+
+story_length : 16
+firstpage_length: 4
+page_length : 16
--- /dev/null
+# In this file are defined values specific for the user's system
+
+
+# target name. settings file (THIS FILE) is "settings-TARGET_NAME.txt"
+# where TARGET_NAME is the value
+target: debug
+
+name: test-bsta
+
+
+# Where the software will be located
+bin_path: /botm/bin/test-bsta
+
+# where the libraries will be located
+lib_path: /botm/lib/test-bsta
+
+# where the software will remember data
+data_path: /botm/data/test-bsta
+
+#where the software will record logs
+log_path: /botm/log/test-bsta
+
+#for temporary fies
+tmp_path: /botm/tmp/test-bsta
+
+#for the www server
+www_path : /botm/www/1190/bstatest
+cgi_path : /bstatest
+conf_path: /botm/etc/www/conf/1190
+
+#cron files directory
+cron_path: /etc/cron.d
+
+path: /usr/local/bin:/usr/bin:/bin
+# The path environment variable. Must be overwritten if SETUID.
+# Otherwise launching programs may fail.
+# (Perl security...)
+
+
+#paths to software
+
+chmod: /usr/bin/chmod
+cp : /usr/bin/cp
+gzip : /usr/bin/gzip
+mkdir: /usr/bin/mkdir
+mv : /usr/bin/mv
+perl : /usr/bin/perl
+rm : /usr/bin/rm
+sudo : /usr/bin/sudo
+
+CC: /usr/bin/gcc
+CF: -g -Wall
+
+
+# How big can a log file be
+log_size_limit: 65536
+
+# How many uncompressed old logs to keep
+logs_uncompressed: 2
+
+# How many old logs to keep
+logs_total: 10
+
+# When to deal with old logs
+oldlogs_schedule: #0 4 * * *
+
+# When to run the ONG bot
+ong_schedule: #0 * * * *
+
+# When to RESET EVERYTHING
+reset_schedule: #33 4 * * *
+
+cron_user: b
+
+
+website : 1190.bicyclesonthemoon.info
+website_name: Bicycles on the Moon
+favicon_path: /img/favicon.png
+intf_date : 28-Sep-2016 20:34
+coin_date : 13-Nov-2016 22:15
+
+story_length : 16
+firstpage_length: 4
+page_length : 16
--- /dev/null
+# In this file are defined values specific for the user's system
+
+
+# target name. settings file (THIS FILE) is "settings-TARGET_NAME.txt"
+# where TARGET_NAME is the value
+target: tbst
+
+name: tbst
+
+
+# Where the software will be located
+bin_path: /botm/bin/tbst
+
+# where the libraries will be located
+lib_path: /botm/lib/tbst
+
+# where the software will remember data
+data_path: /botm/data/tbst
+
+#where the software will record logs
+log_path: /botm/log/tbst
+
+#for temporary fies
+tmp_path: /botm/tmp/tbst
+
+#for the www server
+www_path : /botm/www/1190/tbst
+cgi_path : /tbst
+conf_path: /botm/etc/www/conf/1190
+
+#cron files directory
+cron_path: /etc/cron.d
+
+path: /usr/local/bin:/usr/bin:/bin
+# The path environment variable. Must be overwritten if SETUID.
+# Otherwise launching programs may fail.
+# (Perl security...)
+
+
+#paths to software
+
+chmod: /usr/bin/chmod
+cp : /usr/bin/cp
+gzip : /usr/bin/gzip
+mkdir: /usr/bin/mkdir
+mv : /usr/bin/mv
+perl : /usr/bin/perl
+rm : /usr/bin/rm
+sudo : /usr/bin/sudo
+
+CC: /usr/bin/gcc
+CF: -g -Wall
+
+
+# How big can a log file be
+log_size_limit: 65536
+
+# How many uncompressed old logs to keep
+logs_uncompressed: 2
+
+# How many old logs to keep
+logs_total: 10
+
+# When to deal with old logs
+oldlogs_schedule: #2 4 * * *
+
+# When to run the ONG bot
+ong_schedule: #0 * * * *
+
+# When to RESET EVERYTHING
+reset_schedule: #33 4 * * *
+
+cron_user: b
+
+
+website : 1190.bicyclesonthemoon.info
+website_name: Bicycles on the Moon
+favicon_path: /img/favicon.png
+intf_date : 28-Sep-2016 20:34
+coin_date : 13-Nov-2016 22:15
+
+story_length : 16
+firstpage_length: 4
+page_length : 16
+++ /dev/null
-# settings
-# 19.11.2016
-#
-# In this file are defined values specific for the user's system
-#
-# Copyright (C) 2016 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 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/>.
-
-#all directory paths must end with '/' and must already exist.
-
-bin_path = /eizm/bin/bstatest/ #Where the software will be located
-data_path = /eizm/data/bstatest/ #where the software will remember data; subdir:
- #group, groupsettings
-log_path = /eizm/log/bstatest/ #where the software will remember data
-tmp_path = /eizm/tmp/bstatest/ #for temporary fies
-www_path = /eizm/www/time/tbst/ #for the www server
-lib_path = /eizm/lib/bstatest/
-cgi_path = /tbst/
-
-path = /usr/local/bin:/usr/bin:/bin #The path environment variable. Must be
- #overwritten if SETUID. Otherwise
- #launching programs may fail. (Perl
- #security...)
-
-
-#paths to software
-perl = /usr/bin/perl
-chmod = /bin/chmod
-cp = /bin/cp
-mv = /bin/mv
-rm = /bin/rm
-gcc = /usr/bin/gcc
-gzip = /bin/gzip
-c_flags = -g -Wall
-
-log_size_limit = 65536 # How big can a log file be
-logs_uncompressed = 2 # How many uncompressed old logs to keep
-logs_total = 10 # How many old logs to keep
-
-rm_access_crontab = 10 2 * * * # How often to remove leftover unlock info.
-oldlogs_crontab = 0 2 * * * # How often to deal with old logs
-bot_crontab = 20 2 * * * # How often to run the bot
-
-website = 1190.bicyclesonthemoon.info
-website_name = Bicycles on the Moon
-favicon_path = /img/favicon.png
-intf_date = 28-Sep-2016 20:34
-coin_date = 13-Nov-2016 22:15
-
-story_length = 16
-firstpage_length = 4
-page_length = 16
--- /dev/null
+# settings.txt
+#
+# Copyright (C) 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 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/>.
+
+_version: 1.0.0
+
+_SHEBANG: #!$0
+
+_PERL_STR: '@_ESCAPE($0,')'
+_PERL_USE_2: use $0 $1;
+_PERL_CONSTANT: use constant $0 => $1;
+_PERL_CONSTANT_STR: @_PERL_CONSTANT($0,@_PERL_STR($1))
+_PERL_OUR: our $0 = $1;
+_PERL_OUR_STR: @_PERL_OUR(\$$0,@_PERL_STR($1))
+
+
+_bin_path = @_PATH( $bin_path, )
+_bin_2words_path = @_PATH( $bin_path, 2words )
+_bin_attach_path = @_PATH( $bin_path, attach )
+_bin_bbcode_path = @_PATH( $bin_path, bbcode )
+_bin_coin_path = @_PATH( $bin_path, chat )
+_bin_frame_path = @_PATH( $bin_path, frame )
+_bin_goto_path = @_PATH( $bin_path, goto )
+_bin_info_path = @_PATH( $bin_path, info )
+_bin_oldlogs_path = @_PATH( $bin_path, oldlogs )
+_bin_ong_path = @_PATH( $bin_path, ong.pl )
+_bin_reset_path = @_PATH( $bin_path, reset.pl)
+_bin_viewer_path = @_PATH( $bin_path, viewer )
+
+_cgi_path = @_PATH( $cgi_path, )
+_cgi_2words_path = @_PATH( $cgi_path, 2words )
+_cgi_attach_path = @_PATH( $cgi_path, a )
+_cgi_bbcode_path = @_PATH( $cgi_path, b )
+_cgi_coin_path = @_PATH( $cgi_path, coin )
+_cgi_css_path = @_PATH( $cgi_path, bsta.css )
+_cgi_frame_path = @_PATH( $cgi_path, f )
+_cgi_goto_path = @_PATH( $cgi_path, g )
+_cgi_info_path = @_PATH( $cgi_path, i )
+_cgi_logo_path = @_PATH( $cgi_path, botmlogo.png)
+_cgi_timer_path = @_PATH( $cgi_path, timer.js )
+_cgi_viewer_path = @_PATH( $cgi_path, v )
+
+_data_path = @_PATH( $data_path, )
+_data_chat_path = @_PATH( $data_path, chat )
+_data_coin_path = @_PATH( $data_path, coincidence)
+_data_default_path = @_PATH( $data_path, default )
+_data_list_path = @_PATH( $data_path, list )
+_data_noaccess_path = @_PATH( $data_path, noaccess )
+_data_settings_path = @_PATH( $data_path, settings )
+_data_state_path = @_PATH( $data_path, state )
+_data_story_path = @_PATH( $data_path, story )
+
+_log_path = @_PATH( $log_path, )
+_log_ong_path = @_PATH( $log_path, ong.log)
+
+_www_path = @_PATH( $www_path, )
+_www_index_path = @_PATH( $www_path, index.htm)
+
+_conf_path = @_PATH($conf_path, $name\.conf)
+_cron_path = @_PATH($cron_path, $name)
+
+
+CONF_BIN = $_bin_path
+CONF_BIN_2WORDS = $_bin_2words_path
+CONF_BIN_ATTACH = $_bin_attach_path
+CONF_BIN_BBCODE = $_bin_bbcode_path
+CONF_BIN_COIN = $_bin_coin_path
+CONF_BIN_FRAME = $_bin_frame_path
+CONF_BIN_GOTO = $_bin_goto_path
+CONF_BIN_INFO = $_bin_info_path
+CONF_BIN_VIEWER = $_bin_viewer_path
+
+CONF_CGI_2WORDS = $_cgi_2words_path
+CONF_CGI_ATTACH = $_cgi_attach_path
+CONF_CGI_BBCODE = $_cgi_bbcode_path
+CONF_CGI_COIN = $_cgi_coin_path
+CONF_CGI_FRAME = $_cgi_frame_path
+CONF_CGI_GOTO = $_cgi_goto_path
+CONF_CGI_INFO = $_cgi_info_path
+CONF_CGI_VIEWER = $_cgi_viewer_path
+
+
+CRON_ONG = $_bin_ong_path
+CRON_OLDLOGS = $_bin_oldlogs_path
+CRON_RESET = $_bin_reset_path
+
+CRON_USER = $cron_user
+
+CRON_OLDLOGS_SCHEDULE = $oldlogs_schedule
+CRON_ONG_SCHEDULE = $ong_schedule
+CRON_RESET_SCHEDULE = $reset_schedule
+
+CRON_LOG_SIZE_LIMIT = $log_size_limit
+CRON_LOGS_UNCOMPRESSED = $logs_uncompressed
+CRON_LOGS_TOTAL = $logs_total
+
+CRON_LOG = $_log_path
+CRON_ONG_LOG = $_log_ong_path
+
+
+MAKE_TARGET = TARGET = $target
+
+MAKE_CHMOD = CHMOD=$chmod
+MAKE_CP = CP =$cp
+MAKE_MKDIR = MKDIR=$mkdir
+MAKE_PERL = PERL =$perl
+MAKE_RM = RM =$rm
+MAKE_SUDO = SUDO =$sudo
+
+MAKE_CC = CC =$CC
+MAKE_CF = CF =$CF
+
+MAKE_CONF = CONF = $_conf_path
+MAKE_CRON = CRON = $_cron_path
+
+MAKE_BIN_PATH = BIN_PATH = $bin_path
+MAKE_DATA_PATH = DATA_PATH = $data_path
+MAKE_LIB_PATH = LIB_PATH = $lib_path
+MAKE_LOG_PATH = LOG_PATH = $log_path
+MAKE_TMP_PATH = TMP_PATH = $tmp_path
+MAKE_WWW_PATH = WWW_PATH = $www_path
+
+
+PERL_LIB = @_PERL_USE_2(lib, @_PERL_STR($lib_path))
+
+PERL_SET_PATH = \$ENV{'PATH'} = @_PERL_STR($path);
+
+PERL_EXPORT_VERSION = @_PERL_OUR_STR( VERSION, $_version)
+
+PERL_CGI_PATH = @_PERL_CONSTANT_STR( CGI_PATH , $_cgi_path )
+PERL_CGI_2WORDS_PATH = @_PERL_CONSTANT_STR( CGI_2WORDS_PATH, $_cgi_2words_path)
+PERL_CGI_ATTACH_PATH = @_PERL_CONSTANT_STR( CGI_ATTACH_PATH, $_cgi_attach_path)
+PERL_CGI_BBCODE_PATH = @_PERL_CONSTANT_STR( CGI_BBCODE_PATH, $_cgi_bbcode_path)
+PERL_CGI_COIN_PATH = @_PERL_CONSTANT_STR( CGI_COIN_PATH , $_cgi_coin_path )
+PERL_CGI_CSS_PATH = @_PERL_CONSTANT_STR( CGI_CSS_PATH , $_cgi_css_path )
+PERL_CGI_FRAME_PATH = @_PERL_CONSTANT_STR( CGI_FRAME_PATH , $_cgi_frame_path )
+PERL_CGI_GOTO_PATH = @_PERL_CONSTANT_STR( CGI_GOTO_PATH , $_cgi_goto_path )
+PERL_CGI_INFO_PATH = @_PERL_CONSTANT_STR( CGI_INFO_PATH , $_cgi_info_path )
+PERL_CGI_LOGO_PATH = @_PERL_CONSTANT_STR( CGI_LOGO_PATH , $_cgi_logo_path )
+PERL_CGI_TIMER_PATH = @_PERL_CONSTANT_STR( CGI_TIMER_PATH , $_cgi_timer_path )
+PERL_CGI_VIEWER_PATH = @_PERL_CONSTANT_STR( CGI_VIEWER_PATH, $_cgi_viewer_path)
+
+PERL_DATA_PATH = @_PERL_CONSTANT_STR( DATA_PATH , $_data_path )
+PERL_DATA_CHAT_PATH = @_PERL_CONSTANT_STR( DATA_CHAT_PATH , $_data_chat_path )
+PERL_DATA_COIN_PATH = @_PERL_CONSTANT_STR( DATA_COIN_PATH , $_data_coin_path )
+PERL_DATA_DEFAULT_PATH = @_PERL_CONSTANT_STR( DATA_DEFAULT_PATH , $_data_default_path )
+PERL_DATA_LIST_PATH = @_PERL_CONSTANT_STR( DATA_LIST_PATH , $_data_list_path )
+PERL_DATA_NOACCESS_PATH = @_PERL_CONSTANT_STR( DATA_NOACCESS_PATH, $_data_noaccess_path)
+PERL_DATA_SETTINGS_PATH = @_PERL_CONSTANT_STR( DATA_SETTINGS_PATH, $_data_settings_path)
+PERL_DATA_STATE_PATH = @_PERL_CONSTANT_STR( DATA_STATE_PATH , $_data_state_path )
+PERL_DATA_STORY_PATH = @_PERL_CONSTANT_STR( DATA_STORY_PATH , $_data_story_path )
+
+PERL_LOG_PATH = @_PERL_CONSTANT_STR( LOG_PATH, $_log_path)
+
+PERL_WWW_PATH = @_PERL_CONSTANT_STR( WWW_PATH , $_www_path )
+PERL_WWW_INDEX_PATH = @_PERL_CONSTANT_STR( WWW_INDEX_PATH, $_www_index_path)
+
+PERL_WEBSITE = @_PERL_CONSTANT_STR( WEBSITE , $website )
+PERL_WEBSITE_NAME = @_PERL_CONSTANT_STR( WEBSITE_NAME, $website_name)
+PERL_FAVICON_PATH = @_PERL_CONSTANT_STR( FAVICON_PATH, $favicon_path)
+
+PERL_COIN_DATE = @_PERL_CONSTANT_STR( COIN_DATE, $coin_date)
+PERL_INTF_DATE = @_PERL_CONSTANT_STR( INTF_DATE, $intf_date)
+
+PERL_GZIP = @_PERL_CONSTANT_STR( GZIP, $gzip)
+
+PERL_LOG_SIZE_LIMIT = @_PERL_CONSTANT( LOG_SIZE_LIMIT , $log_size_limit)
+PERL_LOGS_UNCOMPRESSED = @_PERL_CONSTANT( LOGS_UNCOMPRESSED, $logs_uncompressed)
+PERL_LOGS_TOTAL = @_PERL_CONSTANT( LOGS_TOTAL , $logs_total)
+
+PERL_STORY_LENGTH = @_PERL_CONSTANT( STORY_LENGTH , $story_length)
+PERL_PAGE_LENGTH = @_PERL_CONSTANT( PAGE_LENGTH , $page_length)
+PERL_FIRSTPAGE_LENGTH = @_PERL_CONSTANT( FIRSTPAGE_LENGTH, $firstpage_length)
+
+
+RUN_PERL = @_SHEBANG($perl)
+++ /dev/null
-#!/usr/bin/perl
-use lib '/eizm/lib/bstatest/';
-use strict;
-use bsta_lib qw(failpage gethttpheader getcgi entityencode readdatafile writedatafile printdatafileht urlencode bb2ht bb2bb linehtml);
-
-my $bb;
-my $ht;
-
-$bb="[fq]<fq>[/fq][tq]<tq>[/tq][ni]<ni>[/ni][br]<br>[/br][po]<po>[/po][url=<url>]<url>[/url][i]<i>[/i]<teqt>\n";
-$ht=bb2bb($bb,1);
-print $ht."\n";
-$ht=bb2ht($bb,1);
-print $ht."\n";
-
-# print ht;
-###PERL;
-#
+###RUN_PERL: #!/usr/bin/perl
+
# updlist.pl is generated from updlist.1.pl.
-# 29.06.2017
#
# The framelist update bot
#
-# Copyright (C) 2016-2017 Balthasar Szczepański
+# Copyright (C) 2016, 2017, 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(readdatafile writedatafile);
use File::Copy;
-###DATA_PATH;
-###WWW_PATH;
-###SETTINGS_PATH;
-###STATE_PATH;
-###DEFAULT_PATH;
-###LIST_PATH;
+###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta/
+###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
my %framedata;
my %gotolist;
my $frame;
-%gotolist=readdatafile(LIST_PATH);
+%gotolist=readdatafile(DATA_LIST_PATH);
for($frame=0; ; ++$frame) {
%framedata=readdatafile(DATA_PATH.$frame);
$gotolist{'ongtime-'.$frame}=$framedata{'ongtime'};
}
-writedatafile (LIST_PATH,%gotolist);
+writedatafile (DATA_LIST_PATH,%gotolist);
+++ /dev/null
-// viewer.c is generated from viewer.1.c
-// 20.08.2016
-//
-// This is the wrapper for viewer.pl.
-// It's run with SETUID to have accesss to some files where the www server
-// should not. That's why it has a C wrapper. In modern systems running scripts
-// directly with SETUID is considered unsafe and not allowed.
-//
-// Copyright (C) 2016 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 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/>.
-
-#include <unistd.h>
-#include <stdio.h>
-
-###VIEWER_PL;
-###VIEWER_PL_ERRLOG;
-
-int main(int argc, char *argv[], char *envp[])
-{
- freopen(VIEWER_PL_ERRLOG,"at",stderr);
- return execve(VIEWER_PL,argv,envp);
-}
-###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 = '';