#! /usr/local/bin/perl
#↑各プロバイダで指定しているパスを記述
#
# 電光!(フリーソフト)
$ver = 5.10;
$Last_Modified = '2002/04/08';
# Copyright (C) 2002 suepon , All rights reserved.
# http://CGIScriptMarket.com/
#
#---------------------- 初期設定ここから ----------------------#
# ※ v.5.09までとv.5.10以降では、
# JavaScript使用時の貼り付けコードが変更になっています。
# アップデートの際には注意して下さい。
# マスターパスワードの設定(必ず設定して下さい→半角英数)
$master = "abcd";
# 記事投稿モード
$send_mode = 0; # 誰でも投稿可 = 0; 管理人のみ投稿可 = 1;
# レス記事投稿モード
$res_mode = 1; # 無効 = 0; 有効 = 1;
# レス記事表示モード
# REアイコンをクリックして表示開始 = 0;
# レスが有れば自動的に表示開始 = 1;
$res_write_mode = 1;
# 記事投稿時の背景色文字色の指定機能(IE4~ NN6~ で有効)
$col_mode = 1; # 無効 = 0; 有効 = 1;
# このスクリプトファイルをhttp:からのフルパスで記述
$script = "http://ayacho.hp.infoseek.co.jp/cgi-bin/denkoh/denkoh.cgi";
# 作業用ディレクトリ(/temp/フォルダ)
# 表示するページから見たパスで記述
$data_dir = "./denkoh/temp/";
# 作業用ディレクトリ(/temp/フォルダ)
# このスクリプトファイルから見たパスで記述
$tmp = "./temp/";
# ログファイルの名前
$file = "data.cgi";
# jcode.pl
# このスクリプトファイルから見たパスで記述
$jcode = "./jcode.pl";
# ファイルロック(一部、この機能が使用できないサーバがあるようです)
# 書込が頻繁にあり、同時投稿などでファイル破損の可能性がある場合はONにする
$lock_mode = 0; # ファイルロックOFF = 0 ファイルロックON = 1
# 記事の最大記録サイズ
# 電光!は表示ページに全てのログを書き出しますので、
# あまり大きな値にすると表示ページそのもののレスポンスが低下します。
# (5000bytesで、全記事に適当にレスが付いた状態でも親記事で数えて概ね10件以上の保存量が確保できます)
$max_log = 5000; # 単位:bytes(1kb = 1000bytes)
# 投稿記事の最大文字数
$max_len = 45;
#+++++ 以下自動リロードモード設定
# 表示ページとは別のサーバに設置する場合や
# サーバの設定(htmlファイルとcgiファイルの呼び出しURLが違う等)により
# 投稿後、削除後に記事表示画面に「書き込み不可」「アクセス不可」等の
# JavaScriptエラーが出て自動リロードができない場合は
# 表示ページと同じ階層にrel.htmlを設置してこの値を 0 にする
#(特に問題ない場合は設定の必要無し)
$relcheck = 1;
# 上の値を0にした場合は、
# 以下2行のコメントアウト(#を消去)してhttp://からのフルパスでURLを指定
#$rel = "http://www.xxx.xx/~xxxxx/rel.html"; # rel.htmlの場所
#$up_dir = "http://www.xxx.xx/~xxxxx/denkoh/temp/"; # 作業フォルダ(temp)の場所
#(アップロードされたはずのファイルが表示されない場合はココ$up_dirを修正)
#+++++ 以下 ファイルのアップロード機能に関する設定
# ファイルのアップロード機能
$ul_mode = 1; # 無効 = 0; 有効 = 1;
# アップロードできるファイルの最大サイズ
# 0 : 制限無し 単位 : バイト(1000bytes = 1kb)
$max_size = 20000;
# アップロード禁止ファイルを指定
# 0 : しない 1 : する
$up_limiter = 1;
# アップロード禁止ファイルの拡張子
# ('拡張子1','拡張子2','拡張子3');の形式でいくつでも記述(.ドットは要りません)
# 特に指定しない場合は設定の必要無し
@file_types = ('bmp','exe','');
#+++++ 以下 単体で使用する場合の設定(ページの1部品として使用場合は必要無し)
# BODY 設定
$html_body = '
';
# ページのタイトル()
$title = "電光!";
#+++++ 以下 掲示板部分の設定
# アイコン用画像
$img_dir = "http://ayacho.hp.infoseek.co.jp/cgi-bin/denkoh/image/"; # 画像設置ディレクトリ(http:からのフルパスで記述)
$memo = "memo.gif"; # 投稿/削除ウィンドウの起動アイコン画像
$skip = "skip.gif"; # 記事をスキップさせるアイコン画像
$home0 = "home_off.gif"; # URLの登録が無い場合のアイコン画像
$home1 = "home.gif"; # URLの登録が有る場合のアイコン画像
$mail0 = "mail_off.gif"; # E-mailの登録が無い場合のアイコン画像
$mail1 = "mail.gif"; # E-mailの登録が有る場合のアイコン画像
$image = "image.gif"; # 画像の登録が有る場合のアイコン画像
$atmt0 = "atmt_off.gif"; # ファイルの登録が無い場合のアイコン画像
$atmt1 = "atmt.gif"; # 画像以外のファイルが登録されている場合のアイコン画像
$rvrs0 = "reverse0.gif"; # 記事の表示順を逆転させるアイコン画像1
$rvrs1 = "reverse1.gif"; # 記事の表示順を逆転させるアイコン画像2
$res0 = "res_off.gif"; # レス記事が無い場合のアイコン画像
$res1 = "res1.gif"; # レス記事が有る場合のアイコン画像
$res2 = "res2.gif"; # レス記事表示中のアイコン画像
$img_size = "width=15 height=15"; # ↑これらの画像サイズ
$bg = "#ffffff"; # 領域全体の背景色(指定しない場合は ""; にする)
$bgimg = "solid_silver.jpg"; # 領域全体の背景画像(指定しない場合は ""; にする)
$bg_height = 30; # 領域全体の高さをピクセル値で指定
# ↑デフォルトまたはオプションで配布の背景画像を使う場合はこのまま
# ↑(任意の画像を使う場合は背景画像サイズによって調整/指定しない場合は空白)
# 記事表示部分
$disp_size = "105"; # 表示用に確保するサイズ(基準はIE…他のブラウザへはこの値から自動で調整)
$disp_color ="#00ff00"; # デフォルトの文字色(投稿時に色の指定が無い場合や色指定無効の場合はこの色で表示)
$disp_bg = "#000000"; # デフォルトの背景色( 〃 )
# 投稿者の名前部分
$name_size = 15; # 表示用に確保するサイズ(基準はIE…他のブラウザへはこの値から自動で調整)
$name_color ="#00ff00"; # デフォルトの文字色(投稿時に色の指定が無い場合や色指定無効の場合はこの色で表示)
$name_bg = "#000000"; # デフォルトの背景色( 〃 )
# 記事の先頭に付ける文字列(空白及び'を混ぜないこと)
$new_head = "NEW-"; # 新着順に表示している時用
$old_head = "OLD-"; # 投稿順に表示している時用
# 投稿記事が無い場合に表示する案内文(空白及び'を混ぜないこと)
$wm_msg = "超小型電光掲示板です…お知らせでもニュースでも御自由に投稿して下さい!!!";
# 上の文字列表示時の投稿者欄表示名(空白及び'を混ぜないこと)
$wm_name = "管理人";
# 日付の表示
$time_mode = 1; # 無効 = 0; 有効 = 1;
#+++++ 以下 別ウィンドウ部分(投稿/削除等)の設定
#(更に細かく設定する場合は 1318~1364行目 [sub style] を直接編集して下さい)
$mw_fc = "#7b68ee"; # 文字色
$mw_bg = "#ffffff"; # 背景色
$mw_ht = "#8a2be2"; # ホットテキスト(リンク)の文字色
#------------------ 初期設定ここまで ------------------#
#------------------ 詳細設定ここから ------------------#
# ※よく判らない場合はいじらないこと
# スキップアイコンのクリッカブルマップパラメータ
$shape1 = "rect"; # 前の記事へ shape
$coords1 = "0,0,6,14"; # 前の記事へ coords
$shape2 = "rect"; # 次の記事へ shape
$coords2 = "8,0,14,14"; # 次の記事へ coords
# 記事のテロップ表示/消去のスピード
$write_spd = 50;
# 次の記事に移るまでの時間(ミリ秒)
$brake_time = 1500;
# 記事のテロップ表示終了後、消去を始めるまでの時間(ミリ秒)
$stop_time = 3000;
# デフォルトの文字サイズ(pt)
$font_size = 10;
# 記事表示部分のスタイル設定
$disp_style = "background:$disp_bg; font-size:$font_size\pt; color:$disp_color;";
# 名前表示部分のスタイル設定
$name_style = "background:$name_bg; font-size:$font_size\pt; color:$name_color;";
#------------------ 詳細設定ここまで ------------------#
if ($ENV{'REQUEST_METHOD'} eq "POST") {
binmode (STDIN);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
if ($buffer) { require $jcode; }
@pairs = split(/Content-Disposition/i,$buffer);
foreach (@pairs) {
$key = "";
if ($_ =~ /Content-Type\:/i) {
($a,$value) = split (/Content-Type\:.*?[\r\n|\r|\n]{4}/,$_);
($a,$name,$b,$filename,$c) = split (/\"/,$_);
if ($filename =~ /\\/) { $key = "\\"; }
elsif ($filename =~ /\//) { $key = "\/"; }
if ($key) { $filename = substr ($filename,rindex ($filename,$key) + 1,length ($filename)); }
$in{'filename'} = $filename;
}
else {
if ($_ =~ /name\=\"(.*?)\"/) { $name = $1; $value = $_; }
$value =~ s/.*?[\r\n|\r|\n]{4}//;
}
($value,$a) = split (/[\r\n|\r|\n]{2}\-{29}/,$value);
if ($name eq 'file' && $filename) { $in{'file'} = $value; }
else {
$value =~ s/[\r\t\n]//g;
$value =~ s/<.*?>//g;
$value =~ s/\,//g;
$value =~ s/\"/\\"/g;
&jcode'convert(*value,'sjis');
if ($name eq "del") { push(@DEL,$value); }
else { $in{$name} = $value; }
}
}
}
else {
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$in{$name} = $value;
}
}
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$num = sprintf ("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
$time = sprintf ("\?%02d\:%02d\:%02d",$hour,$min,$sec);
$agent = $ENV{'HTTP_USER_AGENT'};
$url_size = 50;
$in_size = 20;
$file_size = 40;
$col = 35;
$row = 2;
if ($agent =~ /gecko/i) {
@g_vers = split (/\//,$agent);
$g_ver = pop (@g_vers);
}
if ($agent =~ /msie/i && $agent =~ /mac/i) {
$url_size = int($url_size * 0.7);
$file_size = int($file_size * 0.7);
}
if (! ($agent =~ /msie/i) && $g_ver < 6.2) {
$disp_size = int($disp_size * 0.7);
$in_size = int($in_size * 0.7);
$url_size = int($url_size * 0.7);
$file_size = int($file_size * 0.7);
$name_size = int($name_size * 0.7);
if ($agent =~ /mac/i || $agent =~ /\[.*?\]/i) {
if (! ($agent =~ /gecko/i)) {
$NN = "\{ font-size:$font_size\pt; \}";
$disp_style = $name_style = "";
$NN_disp1 = "";
$NN_disp2 = "";
}
}
} else {
$disp_style = "style=\"$disp_style\"";
$name_style = "style=\"$name_style\"";
$box = " style=\"border-width:0px;\"";
}
$cookie_name ="denkoh";
$copy = ' 電光!';
# ↑著作表示 削除禁止
$ver = sprintf("v\.%.2f",$ver);
$cookies = $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
($par, $value) = split(/=/, $pair);
$par =~ s/ //g;
$DUMMY{$par} = $value;
}
@pairs = split(/,/,$DUMMY{$cookie_name});
foreach $pair (@pairs) {
($par, $value) = split(/:/, $pair);
$COOK{$par} = $value;
}
if ($in{'mode'} eq 'input') { &input; }
elsif ($in{'mode'} eq 'edit') { &delete1; }
elsif ($in{'mode'} eq 'delete') { &delete2; }
elsif ($in{'mode'} eq 'regist') { ®ist; }
elsif ($in{'mode'} eq 'menu') { &menu; }
elsif ($in{'mode'} eq 'res') { &res; }
elsif ($in{'mode'} eq 'open_rel') { &open_rel; }
elsif ($in{'mode'} eq 'appversion') { print "Content-type:text/html\n\n$ver \($Last_Modified\)"; exit; }
else { &js_output; }
sub js_output {
if ($buffer eq "html") {
$data_dir = $tmp;
print "Content-type: text/html\n\n";
print "\n\n$title\n";
print "\n";
print "\n$html_body\n\n\n\n"; }
elsif (! $buffer) { print "\n"; }
}
sub input {
if ($send_mode && $in{'admin'} ne $master) { &gate; }
if ($COOK{'url'}) { $url = "http\:\/\/$COOK{'url'}"; } else { $url = "http\:\/\/"; }
if ($max_size) { $max_ks = $max_size / 1000 . " KB まで"; }
else { $max_ks = "無制限"; }
if ($up_limiter) {
foreach (@file_types) {
if ($_) { $file_check = "$file_check|\.$_"; }
}
$file_check =~ s/\|//;
$file_check = "ffile.match(/$file_check/i)";
}
else { $file_check = "1 == 2"; }
if ($agent =~ /msie/i || $agent =~ /gecko/i) { $bgc = " onClick=\"bgc()\""; }
if ($ul_mode) {
$fcheck = "\n\tffile = document.denkoh_f.file.value;";
$falert = "\telse if (ffile) {
if (ffile.indexOf(\".\") < 0 || $file_check) {
if (confirm(\"【アップロード禁止ファイルが入力されました】\\n\\n拡張子不明ファイル及び以下の拡張子を持つファイルは、\\nアップロード禁止ファイルに指定されています。\\n\\n(@file_types)\\n\\nこのまま送信を続行するとファイルのアップロードは無視されます。\\nよろしいですか?\"))
return true;
else return false;
}
}";
}
&header("【新規投稿】");
print <<"SRT";
SRT
print "\n";
print "\n$title 新規投稿 \n";
print "
\n";
print "\n\[ 新規投稿 \] \[ 一覧/削除 \] \[ 閉じる \]$copy\n";
print "