#!/usr/local/bin/perl # ################################################################## # PET ROOM Editer Ver1.2 # Copyright (C) 2000 Sho Sunami. # All rights reserved. # 作成者 Sho Sunami # E-mail: sho@area-s.com # Home Page: http://www.area-s.com/ # And Produce: http://www.fayreal.com/ # このスクリプトはフリーウェアです。 # 改造は自由ですが、二次配布は禁止します。 # 著作権はTHE MISSING LINK並びにFayrealが保有します。 # 質問等はサポート掲示板まで。 # http://www.fayreal.com/cgi-bin/missinglink/support/support.cgi # ################################################################## # ########################設定はここから############################ require '../jcode.pl'; # jcode.pl のパス $cgiurl = './index.cgi'; # このCGIのパス $petdata = '../pet.dat'; # ペットデータのパス $userdata = '../user.dat'; # ユーザーデータのパス $method = 'POST'; # メソッド $lockkey = 1; # ロックを使用する(Yes = 1,No = 0) $pass = '0123'; # パスワード # ##########################設定終わり############################## $ENV{'TZ'} = "JST-9"; $pettime = time; $daysec = 86400; $ver = '1.2'; &decode; if ($FORM{'mode'} eq "") { &pass; } if ($FORM{'mode'} eq "enter") { &enter; } if ($FORM{'mode'} eq "rewrite") { &writepet; } if ($FORM{'mode'} eq "delete") { &deleteform; } if ($FORM{'mode'} eq "deleted") { &deletedform; } &adminform; exit; # ------------------------- # # Sub Password # ------------------------- # sub pass { &header; print "
\n"; print "
\n"; print "
パスワードを入力してください\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; exit; } # ------------------------- # # Sub Enter # ------------------------- # sub enter { if ($FORM{'pass'} ne $pass) { &error('パスワードが違います') } } # ------------------------- # # Sub Admin Form # 管理者編集モード # ------------------------- # sub adminform { &header; print "ペットデータ変更用CGI
"; print "日付をマイナスする場合、数値の前に-をつけてください。
\n"; print "例:3日後 3 例:3日前 -3
\n"; print "日付の変更は現在に日付を基準にしています。

\n"; print "現在の日付:"; &gettime(time); print "$date
\n"; &readpet; print "
\n"; print "ペットの名前:\n"; print "$petname
\n"; print "変更する名前
\n"; print "
\n"; print "ペットの名付け親:\n"; print "$godfather
\n"; print "変更する名前
\n"; print "
\n"; print "ペットの性別:\n"; print "$sex
\n"; print "変更する性別
\n"; print "
\n"; print "ペットの代:\n"; print "$num
\n"; print "変更する代
\n"; print "
\n"; print "現誕生日:\n"; &gettime($birth); print "$date
\n"; print "何日前(後)に設定しますか?
\n"; print "
\n"; print "最後に餌をあげた日:\n"; &gettime($lastfeed); print "$date
\n"; print "何日前(後)に設定しますか?
\n"; print "
\n"; print "最後に訪問者が来た日:\n"; &gettime($lastvisit); print "$date
\n"; print "何日前(後)に設定しますか?
\n"; print "
\n"; print "最後にペットが遊んだ日:\n"; &gettime($lastplay); print "$date
\n"; print "何日前(後)に設定しますか?
\n"; print "
\n"; print "ペットの現在のGOOD POINT:$good
\n"; print "変更する場合は数値を入力
\n"; print "
\n"; print "ペットの現在のBAD POINT:$bad
\n"; print "変更する場合は数値を入力
\n"; print "
\n"; print "ペットの外出フラグ(1=外出,0=在宅):$out
\n"; print "変更する場合は数値を入力
\n"; print "
\n"; print "\n"; print "\n"; print "
"; print "
\n"; print "\n"; print "\n"; print "
"; &footer; } # ------------------------- # # Sub Delete Form # ユーザーデータ削除モード # ------------------------- # sub deleteform { &header; print "ユーザーデータ削除モード
"; print "削除するユーザーをチェックしてください。(赤い数字はラブポイント)
\n"; print "
\n"; &readuser; foreach $line (@lines) { ($username,$dummy1,$dummy2,$love) = split(/<>/,$line); print "\n"; print "$username "; print "$love
\n"; } print "
\n"; print "
\n"; &footer; exit; } # ------------------------- # # Sub Deleted Form # ユーザーデータ削除処理 # ------------------------- # sub deletedform { &readuser; foreach $line (@lines) { ($username,$dummy1,$dummy2,$love) = split(/<>/,$line); if ($FORM{"$username"} ne 'on') { push (@newlines,$line); } } &lock if $lockkey == 1; open(OUT,">$userdata") || &error("out"); print OUT @newlines; close(OUT); &unlock; } # ------------------------- # # Sub Write Pet # ペットデータの書き込み # ------------------------- # sub writepet { &lock if $lockkey == 1; &readpet; if ($FORM{name} ne '') { $petname = $FORM{name} } if ($FORM{godfather} ne '') { $godfather = $FORM{godfather} } if ($FORM{sex} ne '') { $sex = $FORM{sex} } if ($FORM{birth} ne '') { $birth = $pettime + ($FORM{birth} * $daysec) } if ($FORM{lastfeed} ne '') { $lastfeed = $pettime + ($FORM{lastfeed} * $daysec) } if ($FORM{lastplay} ne '') { $lastplay = $pettime + ($FORM{lastplay} * $daysec) } if ($FORM{lastvisit} ne '') { $lastvisit = $pettime + ($FORM{lastvisit} * $daysec) } if ($FORM{good} ne '') { $good = $FORM{good} } if ($FORM{bad} ne '') { $bad = $FORM{bad} } if ($FORM{out} ne '') { $out = $FORM{out} } if ($FORM{num} ne '') { $num = $FORM{num} } $line = "$petname<>$godfather<>$birth<>$sex<>$dead<>$lastfeed<>$lastplay<>$lastvisit<>$good<>$bad<>$out<>$outdate<>$num"; open(OUT,">$petdata") || &error("out"); print OUT $line; close(OUT); &unlock; } # ------------------------- # # Sub Read Pet # ペットデータの読み取り # ------------------------- # sub readpet { &lock if $lockkey == 1; open(IN,"$petdata") || &error("in"); $line = ; close(IN); ($petname,$godfather,$birth,$sex,$dead,$lastfeed,$lastplay,$lastvisit,$good,$bad,$out,$outdate,$num) = split(/<>/,$line); &unlock; } # ------------------------- # # Sub Read User # ペットデータの読み取り # ------------------------- # sub readuser { &lock if $lockkey == 1; open(IN,"$userdata") || &error("in"); @lines = ; close(IN); &unlock; } # ------------------------- # # Sub Decode # デコード # ------------------------- # sub decode { # フォームからのデータを取得 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); } else { @pairs = split(/&/, $ENV{'QUERY_STRING'}); } # フォームからのデータを連想配列に格納 foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); # 入力データのチェック # タグが入力されていれば、それを無効にする。<などに置き換え表示してる $value =~ s//>/g; # 区切り文字の”,”があれば”,”に変換 $value =~ s/\,/,/g; # 改行コードを
に変換(上からWin、Mac、Unix用の処理) $value =~ s/\r\n/
/g; $value =~ s/\r/
/g; $value =~ s/\n/
/g; # 連想配列に格納 $FORM{$name} = $value; } } # ------------------------- # # Sub Get Time # 時間の取得 # ------------------------- # sub gettime { ($sec,$min,$hour,$dy,$mon,$year,$wday,$yday,$isdst) = localtime($_[0]); $year += 1900 ; $mon = $mon + 1; @week = ('sun','mon','tue','wed','thu','fri','sat'); $date = "$year\/$mon\/$dy\($week[$wday]\) $hour\:$min\:$sec"; } # ------------------------- # # Sub Error # エラー # ------------------------- # sub error { &header; print "

ERROR !

\n"; print "

$_[0]

\n"; &footer; &unlock; exit; } # ------------------------- # # Sub Header # ヘッダー # ------------------------- # sub header { print "Content-type: text/html\n\n"; print "\n\n"; print "\n"; print "$title\n"; print <<"EOM"; EOM print "\n"; } # ------------------------- # # Sub Footer # フッター # ------------------------- # sub footer { print "PET ROOM Editer Ver $ver
\n"; print '[MISSINGLINK] & [Fayreal]'; print "\n\n"; } # ------------------------- # # Sub Lock # ロック # ------------------------- # sub lock { local($flag) = 0; foreach (1 .. 5) { if (-e $lockfile) { sleep(1); } else { open(LOCK,">$lockfile"); close(LOCK); $flag = 1; last; } } if ($flag == 0) { &error("現在、他の人が使用しています"); } } # ------------------------- # # Sub Unlock # アンロック # ------------------------- # sub unlock { if (-e $lockfile) { unlink($lockfile); } }