WeB DoRaMa for pdx
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[WeB DoRaMaシリーズ]]
#contents
#norelated
#br
* WeB DoRaMa for PDX [#rcf0cd0c]
Base Script By WeB DoRaMa Version 1.25+
** はじめに [#c7883852]
WeB DoRaMa for PDXは、[[CGI-StaTion:http://www7.big.or.jp...
WeB DoRaMaは単純明快で、登場人物とセリフを書きこむことに...
** このプログラムについて [#g777f097]
プログラム冒頭の、「ドラマのカスタマイズ項目」の部分をお使...
その他の、設定はWeB DoRaMaと共通です。~
特にWeB DoRaMa本体がなくても動作しますが、その場合、
- index.cgi [755]
- dorama.log [666]
の設定が必要になります。~
また、内部処理として「pdxturn」を使用しているため、&color(#...
(直したほうがいいかも…)
** プログラムはこちらです。 [#mcf5a65a]
- [[&ref(http://webdoramamuseum.s1003.xrea.com/common/img...
(このサンプルは、当サイトでの使用例です。プログラムのファ...
#!/usr/local/bin/perl
#| WeB DoRaMa for pdx ver 1.0
#|
#| typea (2000/3/8)
#| HomePageUrl http://www.digimaga.com/p/
####### Special thanks. ######
#| WeB DoRaMa Version 1.25+
#| This script is free.
#|
#| Author Shigeto Nakazawa.(1996/11/27)
#| HomePageUrl http://www7.big.or.jp/~jawa/
#|
#| Special Thanks おかぴ
#| HomePgaeUrl http://www.mediawars.or.jp/~okapin/
# //////////////////////////////////////////////////////...
# オプションの設定を変更することができます。
# 変更する場合は、readme.htm をご覧になってから行ってく...
# 設定変更には充分注意してください。
# //////////////////////////////////////////////////////...
# ------------------------------------------------------...
# ドラマのカスタマイズ項目です。
# ------------------------------------------------------...
$max = 150; # 登録・表示最大数(あまりに多いと危険)
$view = 20; # 初期画面で表示する数
$title = 'WeB DoRaMa'; # タイトル
# このプログラムの設置URL
$url = '//www.digimaga.com/p/dorama/index.cgi';
# ONCのトップページ(「戻る」の戻り先)
$back_url = '//www.digimaga.com/p/';
# ONCの切断ページ
$desc_url = '//www.digimaga.com/p/onc/desc.txt';
$actors[1] = 'だいすけ'; # ' ' の中だけを書き換え、
$actors[2] = 'ゆうこ'; # それ以外の記号は
$actors[3] = 'けんじ'; # 絶対に消したりしないこと!
$actors[4] = 'えり';
$actors[5] = '効果音';
$actors[6] = 'ナレーション';
# year:年 mon:月 day:日 hour:時 min:分 sec:秒
$date = "mon/day hour:min";
# 一桁のとき二桁に修正するか?
# 0:しない 1:する(時分秒) 2:する(全て)
$date_type = 2;
# IPアドレスの表示 (0:表示しない 1:表示する)
$ip_check = 0;
# リモートホストの表示 (0:表示しない 1:表示する)
$rh_check = 0;
# ファイル関連の設定
$logfile = './dorama.log'; # 記録用ファイル
$lock1 = './dorama1.lock'; # 鍵ファイル(1)
$lock2 = './dorama2.lock'; # 鍵ファイル(2)
$lock_flag = 1; # 鍵ファイルの 1:使...
# //////////////////////////////////////////////////////...
# オプションの設定はここまでです。
# 以下は CGI のプログラムです。
# 書き換えは個人の責任で行って下さい。
# //////////////////////////////////////////////////////...
&read_form;
# pdxturn = 1
if($FORM{'pdxturn'} == 1){
@logs = &read_file($logfile);
&sel_dorama;
print<<"_EOF_";
Content-Type: text/plain
From: $url?no=$no
Content-Type: Text/X-PmailDX
<SEL=19;$back_url>
<SEL=20;$desc_url>
今ストーリーはこうなっています。
--------------
_EOF_
&html_dorama($view-1,0);
print "--------------\n";
print "①";
print "$actors[1]\n";
print "②$actors[2]\n";
print "③$actors[3]\n";
print "④$actors[4]\n";
print "⑤$actors[5]\n";
print "⑥$actors[6]\n";
print "発言したい登場人物の番号を入力して下さい。\n";
print "⑲戻る\n";
print "⑳終了\n";
print "--------------\n";
print "Jawa,typea\n";
exit;
}
# pdxturn = 2
if($FORM{'pdxturn'} == 2){
print<<"_EOF_";
Content-Type: text/plain
From: $url?actor=$FORM{'pdxdata'}&no=$FORM{'no'}
Content-Type: Text/X-PmailDX
<SEL=19;$back_url>
<SEL=20;$desc_url>
$actors[$FORM{'pdxdata'}]の
セリフを入力して下さい。
注意:改行は入力されません。
100文字以上も入力されません。
⑲戻る
⑳終了
--------------
Jawa,typea
_EOF_
exit;
}
#pdxturn = 3
if($FORM{'pdxturn'} == 3){
@logs = &read_file($logfile);
print<<"_EOF_";
Content-Type: text/plain
From: $back_url
Content-Type: Text/X-PmailDX
<SEL=20;$desc_url>
_EOF_
&form_check;
&get_date;
$no = ($FORM{'no'} + 1) % 9999;
$ipad = $FORM{'pdxfrom'};
$rhost = $ENV{'REMOTE_HOST'};
unshift(@logs,"$no<>$date<>$FORM{'pdxdata'}<>$FORM{'...
while (@logs>$max) { pop(@logs); }
&html_dorama($view-1,0);
&write_file($logfile,@logs);
print<<"_EOF_";
--------------
2回続けて書き込みできません。
また来てくださいね。
⑲戻る
⑳終了
--------------
Jawa,typea
_EOF_
exit;
}
# pdxturn > 3
print<<"_EOF_";
Content-Type: text/plain
From: $back_url
Content-Type: Text/X-PmailDX
<SEL=19;$back_url>
<SEL=20;$desc_url>
_EOF_
&error(0,"入力がおかしいか、バグです。");
###### subroutin ######
# [ $no出力 ]
#
sub sel_dorama {
local($view,$flag) = @_;
($no,$date,$dorama,$actor,$rhost,$ipad) = split(/<>/...
}
# [ ドラマ出力 ]
#
sub html_dorama {
local($view,$flag) = @_;
for ($i=$view;$i>-1;$i--) {
($no,$date,$dorama,$actor,$rhost,$ipad) = split(...
print "[$no]$actors[$actor]\n";
if ($flag) { print "$date\n"; }
print "「$dorama」";
if ($rh_check || $ip_check) {
print " [";
if ($rh_check) { print $rhost; }
print " ";
if ($ip_check) { print $ipad; }
print "]";
}
if (!$flag) { print "\n"; }
}
}
# [ 日付取得 ]
#
sub get_date {
$ENV{'TZ'} = "JST-9"; # TimeZone (日本時間 = 国際標...
local($sec,$min,$hour,$day,$mon,$year) = localtime();
$mon++;
if ($date_type) {
if ($sec < 10) { $sec = "0$sec"; } # 秒の修正
if ($min < 10) { $min = "0$min"; } # 分 〃
if ($hour < 10) { $hour = "0$hour"; } # 時 〃
if ($date_type > 1) {
if ($mon < 10) { $mon = "0$mon"; } # 月 〃
if ($day < 10) { $day = "0$day"; } # 日 〃
}
}
if ($year > 99) { $year = $year - 100; }
$date =~ s/year/$year/ig;
$date =~ s/mon/$mon/ig;
$date =~ s/day/$day/ig;
$date =~ s/hour/$hour/ig;
$date =~ s/min/$min/ig;
$date =~ s/sec/$sec/ig;
}
# [ フォームチェック ]
#
sub form_check {
local($ck_no,$date,$dorama,$ck_actor,$rhost,$ipa2) =...
chomp $ipa2;
if ($ck_no ne $FORM{'no'}) {
&error(0,"タイムオーバーだよ、きみぃ。もう、誰か...
}
if ($ck_actor == $FORM{'actor'}) {
&error(0,"同じ人がセリフを言うのは駄目だよ。");
}
if (!$actors[$FORM{'actor'}]) {
&error(0,"セリフを言う人を選ばないといけないなぁ...
}
if (!$FORM{'pdxdata'} || length($FORM{'pdxdata'}) > ...
&error(0,"そんなセリフは認められないなぁ。");
}
# 独自に機能を追加しています。
# 下のコメントをはずした場合、同じ人が二度続けて書き込み...
# if ($ipa2 eq $FORM{'pdxfrom'}) {
# &error(0,"2回続けて書き込みできません。");
# }
}
# [ フォームからデータ取得 ]
#
sub read_form {
local($pair,$buffer);
$buffer = $ENV{'QUERY_STRING'};
$buffer =~ s/%0d%0a//g;
local(@pairs) = split(/&/,$buffer);
foreach (@pairs) {
local($name,$value) = split(/=/,$_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",h...
# $FORM{$name} = &change_code($value);
$FORM{$name} = $value;
}
}
# [ 記録ファイルの処理 ]
#
sub read_file {
local($logfile) = $_[0];
if (!open(IN,$logfile)) { &unlock_file; &error(1,"記...
local(@files) = <IN>;
close(IN);
return @files;
}
sub write_file {
local($logfile,@lines) = @_;
&lock_file($lock1);&lock_file($lock2);
if ($lock_error) { &error(1,"ロックファイルを検出し...
if (!open(OUT,">$logfile")) { &unlock_file; &error(1...
print OUT @lines;
close(OUT);
&unlock_file($lock2);&unlock_file($lock1);
return @lines;
}
# [ ロック機構 ]
#
sub lock_file {
local($lockfile) = $_[0];
if (!$lock_flag) { return 1; }
local($retry) = 5;
while (-f $lockfile) {
if ($retry-- <= 0) {
local($mtime) = (stat($lockfile))[9];
if ($mtime < time()-60*15) { &unlock_file($l...
$lock_error = 1;
return 1;
}
sleep 1;
}
open (LOCK,">$lockfile");
close(LOCK);
return 1;
}
sub unlock_file {
local($lockfile) = $_[0];
unlink($lockfile);
}
# [ エラー処理 ]
#
sub error {
print<<"_EOF_";
$_[1]
⑲戻る
⑳終了
--------------
Jawa,typea
_EOF_
exit;
}
** 最後に [#g87b1317]
WeB DoRaMa for PDXの改造、再配布などは自由ですが、大元のW...
また、WeB DoRaMa for PDXの移植にご了解をいただけましたじ...
WeB DoRaMa for PDXで不明な点があった場合は、くれぐれもじ...
~
オープンネットコンテンツそのものの終了により当ドラマは利...
* 関連ページ [#s9595c02]
#related
終了行:
[[WeB DoRaMaシリーズ]]
#contents
#norelated
#br
* WeB DoRaMa for PDX [#rcf0cd0c]
Base Script By WeB DoRaMa Version 1.25+
** はじめに [#c7883852]
WeB DoRaMa for PDXは、[[CGI-StaTion:http://www7.big.or.jp...
WeB DoRaMaは単純明快で、登場人物とセリフを書きこむことに...
** このプログラムについて [#g777f097]
プログラム冒頭の、「ドラマのカスタマイズ項目」の部分をお使...
その他の、設定はWeB DoRaMaと共通です。~
特にWeB DoRaMa本体がなくても動作しますが、その場合、
- index.cgi [755]
- dorama.log [666]
の設定が必要になります。~
また、内部処理として「pdxturn」を使用しているため、&color(#...
(直したほうがいいかも…)
** プログラムはこちらです。 [#mcf5a65a]
- [[&ref(http://webdoramamuseum.s1003.xrea.com/common/img...
(このサンプルは、当サイトでの使用例です。プログラムのファ...
#!/usr/local/bin/perl
#| WeB DoRaMa for pdx ver 1.0
#|
#| typea (2000/3/8)
#| HomePageUrl http://www.digimaga.com/p/
####### Special thanks. ######
#| WeB DoRaMa Version 1.25+
#| This script is free.
#|
#| Author Shigeto Nakazawa.(1996/11/27)
#| HomePageUrl http://www7.big.or.jp/~jawa/
#|
#| Special Thanks おかぴ
#| HomePgaeUrl http://www.mediawars.or.jp/~okapin/
# //////////////////////////////////////////////////////...
# オプションの設定を変更することができます。
# 変更する場合は、readme.htm をご覧になってから行ってく...
# 設定変更には充分注意してください。
# //////////////////////////////////////////////////////...
# ------------------------------------------------------...
# ドラマのカスタマイズ項目です。
# ------------------------------------------------------...
$max = 150; # 登録・表示最大数(あまりに多いと危険)
$view = 20; # 初期画面で表示する数
$title = 'WeB DoRaMa'; # タイトル
# このプログラムの設置URL
$url = '//www.digimaga.com/p/dorama/index.cgi';
# ONCのトップページ(「戻る」の戻り先)
$back_url = '//www.digimaga.com/p/';
# ONCの切断ページ
$desc_url = '//www.digimaga.com/p/onc/desc.txt';
$actors[1] = 'だいすけ'; # ' ' の中だけを書き換え、
$actors[2] = 'ゆうこ'; # それ以外の記号は
$actors[3] = 'けんじ'; # 絶対に消したりしないこと!
$actors[4] = 'えり';
$actors[5] = '効果音';
$actors[6] = 'ナレーション';
# year:年 mon:月 day:日 hour:時 min:分 sec:秒
$date = "mon/day hour:min";
# 一桁のとき二桁に修正するか?
# 0:しない 1:する(時分秒) 2:する(全て)
$date_type = 2;
# IPアドレスの表示 (0:表示しない 1:表示する)
$ip_check = 0;
# リモートホストの表示 (0:表示しない 1:表示する)
$rh_check = 0;
# ファイル関連の設定
$logfile = './dorama.log'; # 記録用ファイル
$lock1 = './dorama1.lock'; # 鍵ファイル(1)
$lock2 = './dorama2.lock'; # 鍵ファイル(2)
$lock_flag = 1; # 鍵ファイルの 1:使...
# //////////////////////////////////////////////////////...
# オプションの設定はここまでです。
# 以下は CGI のプログラムです。
# 書き換えは個人の責任で行って下さい。
# //////////////////////////////////////////////////////...
&read_form;
# pdxturn = 1
if($FORM{'pdxturn'} == 1){
@logs = &read_file($logfile);
&sel_dorama;
print<<"_EOF_";
Content-Type: text/plain
From: $url?no=$no
Content-Type: Text/X-PmailDX
<SEL=19;$back_url>
<SEL=20;$desc_url>
今ストーリーはこうなっています。
--------------
_EOF_
&html_dorama($view-1,0);
print "--------------\n";
print "①";
print "$actors[1]\n";
print "②$actors[2]\n";
print "③$actors[3]\n";
print "④$actors[4]\n";
print "⑤$actors[5]\n";
print "⑥$actors[6]\n";
print "発言したい登場人物の番号を入力して下さい。\n";
print "⑲戻る\n";
print "⑳終了\n";
print "--------------\n";
print "Jawa,typea\n";
exit;
}
# pdxturn = 2
if($FORM{'pdxturn'} == 2){
print<<"_EOF_";
Content-Type: text/plain
From: $url?actor=$FORM{'pdxdata'}&no=$FORM{'no'}
Content-Type: Text/X-PmailDX
<SEL=19;$back_url>
<SEL=20;$desc_url>
$actors[$FORM{'pdxdata'}]の
セリフを入力して下さい。
注意:改行は入力されません。
100文字以上も入力されません。
⑲戻る
⑳終了
--------------
Jawa,typea
_EOF_
exit;
}
#pdxturn = 3
if($FORM{'pdxturn'} == 3){
@logs = &read_file($logfile);
print<<"_EOF_";
Content-Type: text/plain
From: $back_url
Content-Type: Text/X-PmailDX
<SEL=20;$desc_url>
_EOF_
&form_check;
&get_date;
$no = ($FORM{'no'} + 1) % 9999;
$ipad = $FORM{'pdxfrom'};
$rhost = $ENV{'REMOTE_HOST'};
unshift(@logs,"$no<>$date<>$FORM{'pdxdata'}<>$FORM{'...
while (@logs>$max) { pop(@logs); }
&html_dorama($view-1,0);
&write_file($logfile,@logs);
print<<"_EOF_";
--------------
2回続けて書き込みできません。
また来てくださいね。
⑲戻る
⑳終了
--------------
Jawa,typea
_EOF_
exit;
}
# pdxturn > 3
print<<"_EOF_";
Content-Type: text/plain
From: $back_url
Content-Type: Text/X-PmailDX
<SEL=19;$back_url>
<SEL=20;$desc_url>
_EOF_
&error(0,"入力がおかしいか、バグです。");
###### subroutin ######
# [ $no出力 ]
#
sub sel_dorama {
local($view,$flag) = @_;
($no,$date,$dorama,$actor,$rhost,$ipad) = split(/<>/...
}
# [ ドラマ出力 ]
#
sub html_dorama {
local($view,$flag) = @_;
for ($i=$view;$i>-1;$i--) {
($no,$date,$dorama,$actor,$rhost,$ipad) = split(...
print "[$no]$actors[$actor]\n";
if ($flag) { print "$date\n"; }
print "「$dorama」";
if ($rh_check || $ip_check) {
print " [";
if ($rh_check) { print $rhost; }
print " ";
if ($ip_check) { print $ipad; }
print "]";
}
if (!$flag) { print "\n"; }
}
}
# [ 日付取得 ]
#
sub get_date {
$ENV{'TZ'} = "JST-9"; # TimeZone (日本時間 = 国際標...
local($sec,$min,$hour,$day,$mon,$year) = localtime();
$mon++;
if ($date_type) {
if ($sec < 10) { $sec = "0$sec"; } # 秒の修正
if ($min < 10) { $min = "0$min"; } # 分 〃
if ($hour < 10) { $hour = "0$hour"; } # 時 〃
if ($date_type > 1) {
if ($mon < 10) { $mon = "0$mon"; } # 月 〃
if ($day < 10) { $day = "0$day"; } # 日 〃
}
}
if ($year > 99) { $year = $year - 100; }
$date =~ s/year/$year/ig;
$date =~ s/mon/$mon/ig;
$date =~ s/day/$day/ig;
$date =~ s/hour/$hour/ig;
$date =~ s/min/$min/ig;
$date =~ s/sec/$sec/ig;
}
# [ フォームチェック ]
#
sub form_check {
local($ck_no,$date,$dorama,$ck_actor,$rhost,$ipa2) =...
chomp $ipa2;
if ($ck_no ne $FORM{'no'}) {
&error(0,"タイムオーバーだよ、きみぃ。もう、誰か...
}
if ($ck_actor == $FORM{'actor'}) {
&error(0,"同じ人がセリフを言うのは駄目だよ。");
}
if (!$actors[$FORM{'actor'}]) {
&error(0,"セリフを言う人を選ばないといけないなぁ...
}
if (!$FORM{'pdxdata'} || length($FORM{'pdxdata'}) > ...
&error(0,"そんなセリフは認められないなぁ。");
}
# 独自に機能を追加しています。
# 下のコメントをはずした場合、同じ人が二度続けて書き込み...
# if ($ipa2 eq $FORM{'pdxfrom'}) {
# &error(0,"2回続けて書き込みできません。");
# }
}
# [ フォームからデータ取得 ]
#
sub read_form {
local($pair,$buffer);
$buffer = $ENV{'QUERY_STRING'};
$buffer =~ s/%0d%0a//g;
local(@pairs) = split(/&/,$buffer);
foreach (@pairs) {
local($name,$value) = split(/=/,$_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",h...
# $FORM{$name} = &change_code($value);
$FORM{$name} = $value;
}
}
# [ 記録ファイルの処理 ]
#
sub read_file {
local($logfile) = $_[0];
if (!open(IN,$logfile)) { &unlock_file; &error(1,"記...
local(@files) = <IN>;
close(IN);
return @files;
}
sub write_file {
local($logfile,@lines) = @_;
&lock_file($lock1);&lock_file($lock2);
if ($lock_error) { &error(1,"ロックファイルを検出し...
if (!open(OUT,">$logfile")) { &unlock_file; &error(1...
print OUT @lines;
close(OUT);
&unlock_file($lock2);&unlock_file($lock1);
return @lines;
}
# [ ロック機構 ]
#
sub lock_file {
local($lockfile) = $_[0];
if (!$lock_flag) { return 1; }
local($retry) = 5;
while (-f $lockfile) {
if ($retry-- <= 0) {
local($mtime) = (stat($lockfile))[9];
if ($mtime < time()-60*15) { &unlock_file($l...
$lock_error = 1;
return 1;
}
sleep 1;
}
open (LOCK,">$lockfile");
close(LOCK);
return 1;
}
sub unlock_file {
local($lockfile) = $_[0];
unlink($lockfile);
}
# [ エラー処理 ]
#
sub error {
print<<"_EOF_";
$_[1]
⑲戻る
⑳終了
--------------
Jawa,typea
_EOF_
exit;
}
** 最後に [#g87b1317]
WeB DoRaMa for PDXの改造、再配布などは自由ですが、大元のW...
また、WeB DoRaMa for PDXの移植にご了解をいただけましたじ...
WeB DoRaMa for PDXで不明な点があった場合は、くれぐれもじ...
~
オープンネットコンテンツそのものの終了により当ドラマは利...
* 関連ページ [#s9595c02]
#related
ページ名:
警告:くれぐれもまとめサイトに転載・記載するのだけはおやめください。