#!/usr/bin/perl # Sun Board v2.31 (2001/01/21) # Copyright(C) KENT WEB 2001 # webmaster@kent-web.com # http://www.kent-web.com/ $ver = 'Sun Board v2.31'; # バージョン情報 #--- [注意事項] ------------------------------------------------# # 1. このスクリプトはフリーソフトです。このスクリプトを使用した # # いかなる損害に対して作者は一切の責任を負いません。 # # 2. 設置に関する質問はサポート掲示板にお願いいたします。 # # 直接メールによる質問は一切お受けいたしておりません。 # #---------------------------------------------------------------# #============# # 設定項目 # #============# # 文字コードライブラリ取込 require './jcode.pl'; # タイトル名 $title = "Sun Board"; # タイトルの色 $t_color = "#000000"; # タイトルのサイズ $t_size = 6; # タイトル文字のタイプ $t_face = 'MS Pゴシック'; # 壁紙 (パス付きで指定) $bground = ""; # 背景色 $bgcolor = "#CCCCCC"; # 文字色を指定 $text = "#000000"; # リンク色 $link = "#0000ff"; # 未訪問 $vlink = "#0000ff"; # 訪問済 $alink = "#0000ff"; # 訪問中 # 管理用パスワード(英数字) $pass = '******'; # 戻り先 (index.htmlなど) $home = "http://www42.tok2.com/home/fukuzo/index.html"; # 記事の最大保持数 $max = 20; # 表示ファイル第1ページの記事数 $pagelog = 10; # 自動リンク (0=no 1=yes) $autolink = 1; # ログディレクトリ (フルパスだと / から) $log_dir = "."; # 表示ファイルディレクトリ (フルパスだと / から) $htm_dir = "../.."; # CGIスクリプト自身をURLで指定 $script = "http://www42.tok2.com/home/fukuzo/cgi-bin/sunbbs/sunbbs.cgi"; # 表示ファイル (index.html) のある「ディレクトリ」をURLで指定 $htm_url = "http://www42.tok2.com/home/fukuzo"; # 新着情報ボードモード (0=no 1=yes) $whatsnew = 1; # 題名部の色 $obi_color = "#CCCCCC"; # 題名部ポインタ $point = '■'; # 戻り先部ポインタ $point2 = '▲'; # ポインタの色 $p_color = "#888888"; # 題名の色 $s_color = "#000000"; # タイトルGIF画像 (http://から記述) $t_gif = ""; # タイトル画像の幅 $tg_w = '250'; # タイトル画像の高さ $tg_h = '54'; # 日付の種類 (0=洋式 1=和式) $date_type = 0; # ログファイル名 $logfile = "sunbbs.log"; # 表示ファイルHTML(第1ページ) $htmfile = "index.html"; # 表示ファイルHTML(第2ページ) $nexthtm = "index2.html"; # 掲示板使用時のタグ許可 (0=no 1=yes) $tagkey = 0; # method形式 (POST/GET) $method = 'POST'; # ロックファイル処理 (0=no 1=symlink 2=open) $lockkey = 0; # ロックファイル名 $lockfile = './sunbbs.lock'; # 改行形式 (soft=手動 hard=強制) $wrap = 'soft'; # ブラウザのキャッシュ取込を拒否 (0=no 1=yes) $nocashe = 1; # 投稿があるとメール通知する(0=no 1=yes) $mailing = 0; # メールアドレス(メール通知する時) $mailto = 'xxx@xxx.xxx'; # sendmailパス(メール通知する時) $sendmail = '/usr/lib/sendmail'; ## --- 過去ログ設定 (sunbbs2.cgi 必須) # 過去ログ機能 (0=no 1=yes) $pastkey = 1; # 過去ログのあるディレクトリ (フルパスだと / から) $past_dir = "../../old"; # 過去ログカウントファイル $pastno = './pastno.dat'; # 過去ログ1ファイル当りの行数の限度 $log_line = '15'; # 補助プログラムのファイル名 $subfile = './cgi-bin/sunbbs/sunbbs2.cgi'; ## --- 管理者コメント(タイトル下部にちょっとしたコメントを表示できます) $message = <<"MSG"; 私のホームページはいかがでしたか? お気軽にメッセージをお書きください。 MSG ## --- スタイルシート設定 $ssheet = 0; # スタイルシートの適用 (0=no 1=yes) $style = <<"EOM"; # スタイルシートのタグを記述 EOM #============# # 設定完了 # #============# # bodyタグを定義 if ($bground) { $body = ""; } else { $body = ""; } $body2 = ""; # HTMLディレクトリ指定で最後に / がついていたら切り捨てる $htm_url =~ s/\/$//; &form_decode; if ($mode eq 'regist') { ®ist; } if ($mode eq 'form') { &form; } if ($mode eq 'form2') { &form2; } if ($mode eq 'find') { &find; } if ($mode eq 'admin_in') { &admin_in; } if ($mode eq 'admin' || $mode eq 'delmsg') { &admin; } if ($mode eq 'edit' || $mode eq 'admin_del') { &edit; } if ($mode eq 'del') { &msg_del; } &location; ## --- 投稿フォーム1 sub form { # パスワードチェック if ($whatsnew && $FORM{'pass'} ne "$pass") { &error("パスワードが違います。"); } print "Content-type: text/html\n\n"; print "\n$title\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "$body\n"; print "<center><font size=4>フレームが利用できないようです。\n"; print "<P><a href=\"$script?mode=form2&pass=$FORM{'pass'}\">ここをクリック</a> して下さい。\n"; print "</font></center>\n</body>\n"; print "\n"; exit; } ## --- 投稿フォーム2 sub form2 { # クッキーを取得 if ($whatsnew == 0) { &get_cookie; } # フォームサイズを定義 &form_size; &header; print "
\n"; print "\n"; print "\n"; # 掲示板モードのとき if ($whatsnew == 0) { ## -- 返信の場合 if ($FORM{'no'}) { # ログを開く open(DB,"$log_dir/$logfile") || &error("Can't open $logfile"); @lines = ; close(DB); # 親記事を検索し分解 foreach $line (@lines) { ($num,$date,$name,$email,$sub,$com) = split(/<>/,$line); if ($FORM{'no'} eq "$num") { if ($sub eq "") { $sub = "no title"; } last; } } # 返信用項目を作成 if ($sub =~ /^Re/) { $sub =~ s/Re//; $res_sub = "Re\[$num\]" . "$sub"; } else { $res_sub = "Re\[$num\]\: $sub"; } $res_com = "\>\; $com"; $res_com =~ s/
/\r\>\; /ig; print "
\n"; print "以下は、記事NO [$num] $sub ($nameさん) に対する返信フォームです。
\n"; print "【親記事】

\n"; print "
$com
\n"; print "

\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; # 新着ボードモードのとき } else { print "投稿する記事を以下のフォームに記述し「投稿する」ボタンを押して下さい。

\n"; print "

おなまえ
Eメール
\n"; print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; print ""; print "\n"; if ($whatsnew == 0) { print ""; print "\n"; } print "
日 付
タイトル\n"; print ""; print "
コメント
"; print "
URL
削除キー\n"; print "自分の記事を削除時に使用(英数字で8文字以内)
\n"; print "\n"; exit; } ## --- 書込み処理 sub regist { # パスワードチェック if ($whatsnew && $FORM{'pass'} ne "$pass") { &error("パスワードが違います。"); } if ($whatsnew == 0 && $name eq "") { &error("なまえの記入がありません。"); } if ($comment eq "") { &error("コメントに記入がありません。"); } # ロック開始 if ($lockkey == 1) { &lock1; } elsif ($lockkey == 2) { &lock2; } open(DB,"$log_dir\/$logfile") || &error("Can't open $logfile"); @lines = ; close(DB); # 二重投稿の禁止 ($knum,$kdate,$kname,$kemail,$ksubj,$kcom) = split(/<>/,$lines[0]); if ($name eq $kname && $comment eq $kcom) { &error("二重投稿は禁止です"); } # クッキーを発行 if ($whatsnew == 0) { &set_cookie; } ## 過去ログを取得する場合 if ($pastkey && $#lines >= $max-1) { &pastlog; } # 記事Noカウント $number = $knum + 1; # 最大記事数超を切り捨て $i=0; @new = (); foreach (0 .. $#lines) { push (@new,$lines[$i]); $i++; if ($i >= $max-1) { last; } } # 削除キーを暗号化 if ($pwd) { &pwd_encode($pwd); } # ホスト名を取得 &get_host; # 日付処理 if ($whatsnew) { $date = $FORM{'date'}; } # ログをフォーマット unshift (@new,"$number<>$date<>$name<>$email<>$subj<>$comment<>$url<>$host<>$ango<>\n"); # ログを更新 open(DB,">$log_dir\/$logfile") || &error("Can't write $logfile"); print DB @new; close(DB); # 全体の記事数を把握 if ($pagelog < $#new+1) { $flag=1; } # HTMLファイルを生成(第1ページ) $write_file = "$htm_dir\/$htmfile"; &html_regist; # HTMLファイルを生成(第2ページ) if ($flag) { $write_file = "$htm_dir\/$nexthtm"; &html_regist; } # ロック解除 unlink($lockfile) if (-e $lockfile); # メール通知処理 if ($mailing && $email ne "$mailto") { &mail_to; } # HTMLファイルへ戻る &location; exit; } ## --- HTML生成処理 sub html_regist { open(HTML,">$write_file") || &error("Can't write $write_file"); #######################inserted by fukuzo start from here ############################### print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "Fukuzo!'s Home\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML "

\n"; print HTML "
\n"; print HTML "
\n"; print HTML "ポップアップメッセージ(?)多用中!マウスをリンクにかざしてください!
\n"; print HTML " \n"; print HTML "
Fukuzo!'s Search\n"; print HTML "
\n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML "
help
\n"; print HTML "
\n"; print HTML "
\n"; print HTML "掲示板
\n"; print HTML "
\n"; print HTML " Fukuzo!'s Board
\n"; print HTML "
\n"; print HTML "
\n"; print HTML "近況報告ページ
\n"; print HTML "
\n"; print HTML " How I have been?
\n"; print HTML "New! 2002-02-24

\n"; print HTML "
\n"; if ($flag == 1) { print HTML "過去のNEWS
\n"; print HTML "
\n"; print HTML " 最近の記事\n"; print HTML " 検索
\n"; print HTML "
\n"; print HTML " 過去ログ\n"; print HTML " 検索
\n"; print HTML "
\n"; print HTML "
\n"; } elsif ($flag == 2) { print HTML "最新のNEWS
\n"; print HTML "
\n"; print HTML " 最新の記事\n"; print HTML " 検索
\n"; print HTML "
\n"; print HTML "
\n"; print HTML "過去のNEWS
\n"; print HTML "
\n"; print HTML " 過去ログ\n"; print HTML " 検索
\n"; print HTML "
\n"; print HTML "
\n"; } print HTML "さらに過去のNEWS
\n"; print HTML "
\n"; print HTML " 2001年
\n"; print HTML " 4月 3月 2月
\n"; print HTML "
\n"; print HTML " 2000年
\n"; print HTML " 12月 11月 10月
\n"; print HTML " 9月 8月 7月
\n"; print HTML " 6月 4月
\n"; print HTML " 2月 1月
\n"; print HTML "
\n"; print HTML " 1999年
\n"; print HTML " 12月11月 10月
\n"; print HTML " 9月 8月 7月
\n"; print HTML " 6月 5月 4月
\n"; print HTML "
\n"; print HTML "
\n"; #===Tips/話題=========================================================== print HTML "過去記事ヘッドライン
\n"; print HTML " \n"; print HTML " Bluetooth関係ニュース New!
\n"; print HTML " 2001年を振り返って New!
\n"; print HTML " Action Names New!
\n"; print HTML " hrFontMapper
\n"; print HTML " TrainConv3!
\n"; print HTML " VisorPRiSM修理で感動
\n"; print HTML " Pilowebサーバー
\n"; print HTML " 最近赤外線使ってます?
\n"; print HTML " Palmware色々
\n"; print HTML " CLIE-N750C気付いた点
\n"; print HTML " PDA購入シミュレーション
\n"; print HTML " PRiSM 16M化撃沈
\n"; print HTML " fukuzo!のPC環境
\n"; print HTML " fukuzo!のPalm環境
\n"; print HTML " fukuzo!のモバイル環境
\n"; print HTML " fukuzo!の通信環境
\n"; print HTML "
\n"; #===Tips/話題終わり=========================================================== print HTML "
\n"; print HTML "
\n"; #print HTML " New!
\n"; print HTML "Palmのリンク
\n"; print HTML "
News Palm
\n"; print HTML " palmfan.com
\n"; print HTML " WorP\@holic
\n"; print HTML " PalmOSLove
\n"; print HTML " ZDNet Palm Tips
\n"; print HTML "
News Palmware
\n"; print HTML " PalmwareReview!
\n"; print HTML " PalmwareFan
\n"; print HTML " ダウンロード\@Nifty
\n"; print HTML " Palmware ML
\n"; print HTML "
更新情報
\n"; #print HTML " Palmアンテナ Closed... (T_T)
\n"; print HTML " PALMLINK
\n"; print HTML " ぱむあん。
\n"; print HTML "
リンク集
\n"; print HTML " 手のひら案内人
\n"; print HTML " Palm勝手口
\n"; print HTML "
News 総合
\n"; print HTML " MIXS PDA/モバイル
\n"; print HTML " ケータイWatch
\n"; print HTML " ZDNet Mobile
\n"; print HTML " CNETモバイル
\n"; print HTML " ASCII携帯24
\n"; print HTML " Pocket Vector
\n"; print HTML "
Visor
\n"; print HTML " AD-VISOR
\n"; print HTML " Visor-Japan
\n"; print HTML " Visor Concerto
\n"; print HTML " Visor'z Fan Frozen...
\n"; print HTML " cool ice
\n"; print HTML " Visorの衣装部屋
\n"; print HTML "
Clie
\n"; print HTML " Cli Cli Clie
\n"; print HTML " CLIE User Club!
\n"; print HTML " CLIE Park
\n"; print HTML " Yes! CLIE+

\n"; print HTML "
HandEra
\n"; print HTML " EraFun
\n"; print HTML "
他機種
\n"; print HTML " WindowsCE FAN
\n"; print HTML "
Comunity
\n"; print HTML " PalmOS\@nifty
\n"; print HTML " FPalm
\n"; print HTML " 全国PalmUG連絡会
\n"; print HTML " Palm ML
\n"; print HTML "
個人
\n"; print HTML " パルマガ cool!
\n"; print HTML " パーム航空 iPAL Frozen
\n"; print HTML " PalmPilotのページ
\n"; print HTML " Pal_Mac_2002!
\n"; print HTML " WithPalmTonight 別館
\n"; print HTML " 大阪PalmIII
\n"; print HTML " おれおま あたあん
\n"; print HTML " ふふふPalm
\n"; print HTML " WorkPadでござる
\n"; print HTML " PalmCity
\n"; print HTML " ぱーむ盆地
\n"; print HTML " kajikajiかじって!
\n"; print HTML " えんすぅ〜ぱあむ!
\n"; print HTML " マサトレ
\n"; print HTML " パムポケ
\n"; print HTML " nom world!
\n"; print HTML " てのひらを太陽に
\n"; print HTML " Cherish Style
\n"; print HTML " PalmNavi
\n"; print HTML " PalmClip
\n"; print HTML " PalmSpace
\n"; print HTML " Hawaiian Palm
\n"; #print HTML " FUKUI's Diary Closed... (T_T)
\n"; print HTML " Palm/Pilot Race
\n"; print HTML " PalmBaseball
\n"; print HTML "
Hardware系
\n"; print HTML " What's_in_my_Palm_Device
\n"; #print HTML " ダイヤHP Frozen...
\n"; print HTML " Palm de COOL! Frozen...
\n"; print HTML " Palm-Pilot_MUSEUM
\n"; print HTML " PDA's Heaven
\n"; print HTML " Merchant's Page
\n"; print HTML " 寺田屋
\n"; print HTML " Asahi's Palm Site
\n"; print HTML " Project_Gemini
\n"; print HTML " くりすたるあーと
\n"; print HTML "
Software系
\n"; print HTML " Palm Hackers Salon
\n"; print HTML " Simple-Palm
\n"; print HTML " Sharming's attics
\n"; print HTML " Palmで行こう!
\n"; print HTML " Fatal_Error_World!
\n"; print HTML " ぱむpamu?
\n"; print HTML " ru0's page
\n"; print HTML " Cafe de Palm
\n"; print HTML " 拝啓PalmOS様
\n"; print HTML " 脱力ゲーム協会
\n"; print HTML " ERRORonPALM
\n"; print HTML " P.messenger Frozen...
\n"; print HTML "
データベース
\n"; print HTML " もう本は要らない
\n"; print HTML "
メーカー
\n"; print HTML " IBM WorkPad
\n"; print HTML " Palm Conmputing
\n"; print HTML " Handspring
\n"; print HTML " SONY CLIE
\n"; print HTML "
コンテンツプロバイダ
\n"; print HTML " CLIE Plaza!
\n"; print HTML " PDA Style
\n"; print HTML " \@ir Bitway for Palm
\n"; print HTML " Vis-a-vis Handango
\n"; print HTML "
ショップ
\n"; print HTML " Ikeshop
\n"; print HTML " Vis-a-Vis
\n"; print HTML " PDA工房
\n"; print HTML " Pilot Pro Shop
\n"; print HTML " Master
\n"; print HTML " pocketgames
\n"; print HTML " ARK's_Palm_Plaza
\n"; print HTML "
English ; Manufacturer
\n"; print HTML " PalmComputing
\n"; print HTML " HandSpring
\n"; print HTML " HandEra
\n"; print HTML " Sony CLIE
\n"; print HTML "
English ; News Source
\n"; print HTML " PalmPower Magazine
\n"; print HTML " PalmStation
\n"; print HTML " PalmGear_H.Q.!
\n"; print HTML " VisorCentral
\n"; print HTML " VisorZone
\n"; print HTML " PDABuzz
\n"; print HTML " EuroCool
\n"; print HTML "
English ; News Software
\n"; print HTML " Handango
\n"; print HTML " FreewarePalm
\n"; print HTML " Memoware.com
\n"; print HTML " PalmGear
\n"; print HTML "
つながらない、正しいリンク先、リンクの自薦他薦などリンクについてはこちらまでお願いします。
\n"; print HTML "m(__)m
\n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML "
Main PageWho am IFavoriteA u t o sComputerPalm Special
\n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; #### 2ページ目のタイトル ##### # $flag=2; } elsif ($flag == 2) { print HTML "

最近の記事10件
\n"; print HTML "
\n"; print HTML " ここはトップページの10件以前の最近の記事10件を格納しています。
\n"; print HTML " これ以前の記事は過去ログへどうぞ。

\n"; print HTML "
\n"; print HTML " by fukuzo! \@ Yokohama, Japan

\n"; print HTML "
"; print HTML "
\n"; } #### 2ページ目のタイトル終わり ##### #######################inserted by fukuzo up to here #################################### #######################edit ; fukuzo start from here #################################### # HTMLヘッダ部 #print HTML "\n\n"; #print HTML "\n"; #print HTML "$title\n"; # スタイルシート適用 #if ($ssheet) { print HTML "$style\n"; } # キャッシュ取込拒否 #if ($nocashe) { print HTML "\n"; } #print HTML "\n"; #print HTML "$body\n"; # リンク部 #print HTML "$point2"; #print HTML "HomePage\n"; if ($whatsnew == 0) { print HTML "$point"; print HTML "PostMessage\n"; } #print HTML "$point"; #print HTML "Search\n"; # 過去ログ #if ($pastkey) { # print HTML "$point"; # print HTML "PastLog\n"; #} #print HTML "$point"; #print HTML "Admin\n"; #print HTML "\n

\n

\n"; # タイトル部 #if ($t_gif eq '') { # print HTML "$title\n"; #} else { # print HTML "\n"; #} # ひとことメッセージを表示 #$message =~ s/\r\n/
/g; #$message =~ s/\r/
/g; #$message =~ s/\n/
/g; #print HTML "

$message

\n"; #print HTML "
\n"; #######################edit ; fukuzo up to here ######################################### # 記事数を定義 if ($flag == 2) { $start = $pagelog; $end = $#new; } else { $start = 0; if ($i < $pagelog) { $end = $i; } else { $end = $pagelog-1; } } # 記事を展開 foreach ($start .. $end) { local($num,$date,$name,$email,$sub,$com,$url,$host) = split(/<>/,$new[$_]); if ($sub eq "") { $sub = "no title"; } if ($autolink) { &auto_link($com); } # 掲示板モードの場合 if ($whatsnew == 0) { print HTML "
 
\n"; if ($flag == 1) { print HTML "

大阪弁 \n"; print HTML " 博多弁 \n"; print HTML " ごちゃ混ぜ方言
\n"; print HTML " ENGLISH \n"; print HTML " German \n"; print HTML " Dutch
\n"; print HTML " Spanish \n"; print HTML " Portuguese \n"; print HTML " French \n"; print HTML " Itary
\n"; print HTML " Korean \n"; print HTML " Chinese

\n"; print HTML " \n"; print HTML "\n"; print HTML "

fukuzo! のホームページへようこそ!
\n"; print HTML "
\n"; print HTML " ここは私の興味のあるもの(主にPalmOSデバイス、他PC一般)
\n"; print HTML "
についてのページです。リンクについて
\n"; print HTML "
\n"; print HTML " by fukuzo! \@ Yokohama, Japan

\n"; print HTML " \n"; print HTML " Lastupdate\: $year-$mon-$mday ($youbi) $hour\:$min

\n"; print HTML "

"; print HTML "\n"; #print HTML "
\n"; print HTML " Total Today Yesterday
\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "
\n"; print HTML "
このページ最新の話題へジャンプ VISOR特設ページへジャンプ
\n"; print HTML "
\n"; print HTML " Piloweb設定
\n"; print HTML "
\n"; print HTML "

\n"; print HTML "
\n"; # print HTML "\n"; print HTML "\n"; # print HTML "\n"; # print HTML "\n"; # print HTML "\n"; # print HTML "
\n"; print HTML "\"テノヒラノワ\"\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\"CLIE\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "
\n"; # print HTML "\n"; print HTML "\n"; print HTML "\n"; # print HTML "\n"; # print HTML "
\n"; print HTML "\"Northern\n"; print HTML "\n"; print HTML "\"KAY\n"; print HTML "
\n"; # print HTML "\n"; print HTML "\n"; print HTML "\n"; # print HTML "
\n"; print HTML "\"パムフェス2002バナー\"\n"; print HTML "
\n"; # # print HTML "
\n"; print HTML "
\n"; # print HTML "
\n"; print HTML "
\n"; print HTML "
\n"; print HTML "\n"; print HTML "
$point\n"; print HTML "$sub
\n"; print HTML "\n"; print HTML ""; print HTML "\n"; print HTML ""; print HTML "\n"; print HTML ""; print HTML "\n"; # メール表示 if ($email) { print HTML ""; print HTML "\n"; } # URL表示 if ($url) { print HTML ""; print HTML "\n"; } print HTML "\n"; print HTML "
No.$num
Name$name
Date:$date
Mail$email
URLhttp://$url

$com
\n"; print HTML "
\n"; print HTML "\n"; print HTML "\n"; print HTML "
\n"; print HTML "

\n"; #######################edit ; fukuzo start from here #################################### # 新着ボードモードの場合 } else { print HTML "\n"; print HTML "\n"; print HTML "\n"; print HTML "
 [$num] \n"; print HTML "$sub
\n"; print HTML "\n"; print HTML "
 $date

\n"; print HTML "
\n"; print HTML "

$com\n"; if ($url) { print HTML "

http://$url\n"; } print HTML "

\n"; print HTML "
\n"; } #print HTML "


\n"; } ## foreach -- END if ($whatsnew == 0) { print HTML "
\n"; } #######################edit ; fukuzo up to here ######################################### #######################inserted by fukuzo start from here ############################### if ($flag == 1) { print HTML "\n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML "
 お知らせ
\n"; print HTML "


\n"; print HTML " Piloweb設定

\n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML " \n"; print HTML "
サイトの名前;
\n"; print HTML "
サイトのURL;
\n"; print HTML "
切り出し最初の文字列;
\n"; print HTML "
切り出し最後の文字列;
Fukuzo!'s Home
\n"; print HTML "
http://www42.tok2.com/home/fukuzo/index.html
\n"; print HTML "
<A name="new">
\n"; print HTML "
<A name="oshirase">
\n"; print HTML "

リンクについて;このページへのリンクはどうぞご自由に。連絡も不要です。
\n"; print HTML "

\n"; print HTML "  ご意見、ご感想、ご要望などがございましたらfukuzo.geo\@yahoo.com までお寄せください

\n"; print HTML "

\"一筆啓上運動〜YOU
\n"; ########################### print HTML "\n"; print HTML "
\n"; print HTML "\n"; ########################### print HTML "

\n"; # $flag=2; } elsif ($flag == 2) { } #######################inserted by fukuzo up to here #################################### # 次/前ページのリンクを生成 print HTML "\n"; print HTML "\n"; $flag=2; } elsif ($flag == 2) { print HTML ""; print HTML "\n"; } print HTML "\n"; print HTML "
\n"; if ($flag == 1) { print HTML "
"; print HTML "
\n"; # 削除フォーム if ($whatsnew == 0) { print HTML "
\n"; print HTML "
\n"; print HTML "以下のフォームから自分の記事を削除できます
\n"; print HTML "記事No \n"; print HTML "削除キー \n"; print HTML "\n"; print HTML "
\n"; print HTML "
\n"; } print HTML "

\n"; #######################edit ; fukuzo start from here #################################### # 著作権を表示(削除禁止) print HTML "
\n"; print HTML "このページは
\n"; print HTML "Sun Board
\n"; print HTML "を使用しています。

\n"; print HTML "Fukuzo!改造版はこちら
\n"; print HTML "参考にされる方はどうぞご利用ください。

\n"; print HTML "
\n"; print HTML "
\n"; print HTML "

. . .

\n"; #######################edit ; fukuzo up to here ######################################### print HTML "\n"; close(HTML); } ## --- 表示ファイルにジャンプ sub location { # IISサーバ対応 if ($ENV{PERLXS} eq "PerlIS") { print "HTTP/1.0 302 Temporary Redirection\r\n"; print "Content-type: text/html\n"; } print "Location: $htm_url\/$htmfile\n\n"; } #######################edit ; fukuzo start from here #################################### ## --- 管理モード入室画面 sub admin_in { &header; print "
\n"; print "管理入室画面
\n"; print "

管理用パスワードを入力して下さい。\n"; print "
\n"; #######################edit ; fukuzo up to here ######################################### # 新着情報ボード時は選択ボタンを表示 if ($whatsnew) { print "記事書込\n"; print "編集/削除

\n"; } else { print "\n"; } print ""; print "

\n"; print "
\n\n\n"; exit; } ## --- 管理用初期画面 sub admin { # パスワードチェック if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います。"); } # ログファイルを開く open(DB,"$log_dir\/$logfile") || &error("Can't open $logfile"); @lines = ; close(DB); #######################edit ; fukuzo start from here #################################### &header; print "\n"; print "
\n"; print "
管 理 画 面
\n"; #######################edit ; fukuzo up to here ######################################### # 記事編集画面 if ($FORM{'edit'}) { &form_size; foreach $line (@lines) { ($num,$date,$name,$email,$subj,$com,$url,$host) = split(/<>/,$line); if ($FORM{'edit'} eq "$num") { last; } } $com =~ s/
/\r/g; if ($url) { $url = "http://$url"; } print <<"EOM";

編集する部分のみ書き換え、編集ボタンを押して下さい。

EOM if ($whatsnew == 0) { print ""; print "\n"; print ""; print "\n"; } print ""; print "\n"; print "\n"; print ""; print "\n"; print "
おなまえ
Eメール
タイトル
コメント
"; print "
URL
\n"; print ""; print "
\n"; } # 管理用初期画面 else { print <<"EOM";

  • 記事を削除する場合はチェックボックスにチェックを入れ、削除ボタンを押して下さい。
  • 記事を編集する場合は、No. をクリックすると編集画面となります。

EOM if ($whatsnew == 0) { print ""; } print "\n"; foreach $line (@lines) { ($num,$date,$name,$email,$subj,$com,$url,$host) = split(/<>/,$line); if ($email) { $name = "$name"; } if (!$subj) { $subj = "no title"; } $com =~ s/
/ /ig; $com =~ s//\>\;/g; if (length($com) > 60) { $com = substr($com,0,58); $com = $com . '..'; } print ""; print ""; print ""; print ""; if ($whatsnew == 0) { print "\n"; } print "\n"; } print "
削除日時No.タイトルなまえホストコメント
$date$num$subj$name$host$com

\n"; } print "\n\n"; exit; } ## --- 記事削除/編集処理 sub edit { # パスワードチェック if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います。"); } # ロック開始 if ($lockkey == 1) { &lock1; } elsif ($lockkey == 2) { &lock2; } # ログファイルを開く open(DB,"$log_dir\/$logfile") || &error("Can't open $logfile"); @lines = ; close(DB); if ($mode eq 'admin_del') { @new=(); foreach $line (@lines) { local($flag) = 0; ($num,$date,$name,$email,$subj,$com,$url,$host,$pwd) = split(/<>/,$line); foreach $delno (@delnos) { if ($delno eq "$num") { $flag=1; last; } } if ($flag == 0) { push(@new,$line); } } } else { $FORM{'url'} =~ s/^http\:\/\///; # 該当記事を抜き出して差し替え @new = (); foreach $line (@lines) { ($num,$date,$name,$email,$subj,$com,$url,$host,$pwd) = split(/<>/,$line); if ($FORM{'edit'} ne "$num") { push(@new,$line); } else { push(@new,"$num<>$date<>$FORM{'name'}<>$FORM{'email'}<>$FORM{'subj'}<>$comment<>$FORM{'url'}<>$host<>$pwd<>\n"); } } } # ログファイルを上書き open(DB,">$log_dir\/$logfile") || &error("Can't write $logfile"); print DB @new; close(DB); # 全体の記事数を把握 if ($pagelog < $#new+1) { $flag=1; } # HTMLファイルを生成(第1ページ) $i = $#new; $write_file = "$htm_dir\/$htmfile"; &html_regist; # HTMLファイルを生成(第2ページ) if ($flag) { $write_file = "$htm_dir\/$nexthtm"; &html_regist; } # ロック解除 unlink($lockfile) if (-e $lockfile); # 削除処理後は管理画面に戻る if ($mode eq "admin_del") { &admin; } # 編集処理後は掲示板へ戻る else { # 表示ファイルに戻る &location; exit; } } ## --- 記事削除処理 sub msg_del { # フォームチェック if ($FORM{'no'} eq "") { &error("記事NOが入力されていません。"); } if ($FORM{'pwd'} eq "") { &error("削除キーが入力されていません。"); } # ロック開始 if ($lockkey == 1) { &lock1; } elsif ($lockkey == 2) { &lock2; } # ログファイルを開く open(DB,"$log_dir\/$logfile") || &error("Can't open $logfile"); @lines = ; close(DB); # ログを分解し、削除記事を検索 $hit=0; foreach $line (@lines) { $del=0; ($num,$date,$name,$email,$sub,$com,$url,$host,$lpwd) = split(/<>/,$line); if ($FORM{'no'} eq "$num") { $del=1; $hit=1; $delkey = $lpwd; } push(@new,$line) if ($del == 0); } if ($hit == 0) { &error("該当の記事NOが見当たりません。"); } if ($delkey eq '') { &error("削除キーが設定されていません。"); } # 削除キー照合処理 $del_flag = 0; if ($pwd eq "$pass") { $del_flag = 1; } else { &pwd_decode($delkey); if ($check eq 'yes') { $del_flag = 1; } } if ($del_flag == 0) { &error("削除キーが違います。"); } # ログを更新 open(DB,">$log_dir\/$logfile") || &error("Can't write $logfile"); print DB @new; close(DB); # 全体の記事数を把握 if ($pagelog < $#new+1) { $flag=1; } # HTMLファイルを生成(第1ページ) $i = $#new; $write_file = "$htm_dir\/$htmfile"; &html_regist; # HTMLファイルを生成(第2ページ) if ($flag) { $write_file = "$htm_dir\/$nexthtm"; &html_regist; } # ロック解除 unlink($lockfile) if (-e $lockfile); # 初期画面に戻る &location; exit; } ## --- フォームからのデータ処理 sub form_decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます。"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # 文字コード変換 &jcode'convert(*value,'sjis'); # タグ処理 if ($whatsnew == 0 && $tagkey == 0) { $value =~ s/&/&\;/g; $value =~ s//>\;/g; } else { $value =~ s///g; $value =~ s/<>/<\;>\;/g; } # 削除処理 if ($name eq "del") { push(@delnos,$value); } $FORM{$name} = $value; } $name = $FORM{'name'}; $comment = $FORM{'comment'}; $comment =~ s/\r\n/
/g; $comment =~ s/\r/
/g; $comment =~ s/\n/
/g; $email = $FORM{'email'}; $url = $FORM{'url'}; $url =~ s/^http\:\/\///; $mode = $FORM{'mode'}; $pwd = $FORM{'pwd'}; $subj = $FORM{'subj'}; # 日時の取得 $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon++; if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } # 日時のフォーマット if ($date_type) { $youbi = ('日','月','火','水','木','金','土') [$wday]; if ($whatsnew) { $date = "$year年$mon月$mday日 ($youbi) $hour時$min分"; } else { $date = "$year年$mon月$mday日 ($youbi) $hour時$min分"; } } else { $youbi = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; if ($whatsnew) { $date = "$year-$mon-$mday ($youbi) $hour\:$min"; } else { $date = "$year/$mon/$mday($youbi) $hour\:$min"; } } } ## --- エラー処理 sub error { unlink($lockfile) if (-e $lockfile); &header; print "

ERROR !

\n"; print "

$_[0]\n"; print "


\n"; print "\n"; exit; } ## --- クッキーの発行 sub set_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg) = gmtime(time + 60*24*60*60); $yearg += 1900; if ($secg < 10) { $secg = "0$secg"; } if ($ming < 10) { $ming = "0$ming"; } if ($hourg < 10) { $hourg = "0$hourg"; } if ($mdayg < 10) { $mdayg = "0$mdayg"; } $mong = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug', 'Sep','Oct','Nov','Dec') [$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday', 'Friday','Saturday') [$wdayg]; $date_gmt = "$youbi, $mdayg\-$mong\-$yearg $hourg:$ming:$secg GMT"; $cook="name\:$name\,email\:$email\,url\:$url\,pwd\:$pwd"; print "Set-Cookie: SUNBBS=$cook; expires=$date_gmt\n"; } ## --- クッキーを取得 sub get_cookie { @pairs = split(/;/, $ENV{'HTTP_COOKIE'}); foreach $pair (@pairs) { local($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/, $DUMMY{'SUNBBS'}); foreach $pair (@pairs) { local($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } $c_name = $COOKIE{'name'}; $c_email = $COOKIE{'email'}; $c_url = $COOKIE{'url'}; $c_pwd = $COOKIE{'pwd'}; if ($FORM{'name'}) { $c_name = $FORM{'name'}; } if ($FORM{'email'}) { $c_email = $FORM{'email'}; } if ($FORM{'url'}) { $c_url = $url; } if ($FORM{'pwd'}) { $c_pwd = $FORM{'pwd'}; } } ## --- ワード検索サブルーチン sub find { &header; #######################edit ; fukuzo start from here #################################### print <<"HTML";
Fukuzo’s Home 最近の20件の記事からワード検索
#######################edit ; fukuzo up to here #########################################

■検索したいキーワードを入力し、検索条件を選択し「検索する」を押してください。
■複数のキーワードを入力するときは、半角スペースで区切って下さい。

キーワード
検索条件 AND OR
HTML # ワード検索の実行と結果表示 if ($FORM{'word'} ne "") { # 入力内容を整理 $cond = $FORM{'cond'}; $word = $FORM{'word'}; $word =~ s/ / /g; $word =~ s/\t/ /g; @pairs = split(/ /,$word); # ファイルを読み込み open(DB,"$log_dir/$logfile") || &error("Can't open $logfile"); @lines = ; close(DB); # 検索処理 foreach $line (@lines) { $flag = 0; foreach $pair (@pairs){ if (index($line,$pair) >= 0){ $flag = 1; if ($cond eq 'or') { last; } } else { if ($cond eq 'and'){ $flag = 0; last; } } } if ($flag == 1) { push(@new,$line); } } # 検索終了 $count = @new; print "
 検索結果:$count件

\n"; # print "

    \n"; foreach $line (@new) { ($no,$date,$name,$email,$sub,$com,$url) = split(/<>/,$line); if (!$sub) { $sub = "無題"; } if ($email) { $name = "$name"; } if ($url) { $url = "http://$url"; } #######################edit ; fukuzo start from here #################################### # 結果を表示 # print "
  1. [$no] $sub\n"; print "
    [$no] $sub
    $date
    $name

    $com

    $url

    \n"; # print "投稿者:$name 投稿日:$date\n"; # print "

    $com

    $url


    \n"; } #
    [$pnum] $psub
    $pdate
    $pname

    $pcom

    $purl

    \n"; # #######################edit ; fukuzo up to here ######################################### print "
\n"; } print "\n"; exit; } ## --- ブラウザを判断しフォーム幅を調整 sub form_size { # ブラウザ情報を取得 $agent = $ENV{'HTTP_USER_AGENT'}; # MSIE 3 の場合 if ($agent =~ /MSIE 3/i) { $nam_wid = 30; $sub_wid = 40; $com_wid = 65; $url_wid = 48; } # MSIE 4/5 の場合 elsif ($agent =~ /MSIE 4/i || $agent =~ /MSIE 5/i) { $nam_wid = 30; $sub_wid = 40; $com_wid = 65; $url_wid = 78; } # その他 else { $nam_wid = 20; $sub_wid = 25; $com_wid = 56; $url_wid = 50; } } ## --- HTMLのヘッダー sub header { print "Content-type: text/html\n\n"; print "\n\n"; # スタイルシート if ($ssheet) { print "$style\n"; } # キャッシュ取込拒否 if ($nocashe) { print "\n"; } print "\n"; print "$title\n"; print "$body2\n"; } ## --- パスワード暗号処理 sub pwd_encode { $now = time; ($p1, $p2) = unpack("C2", $now); $wk = $now / (60*60*24*7) + $p1 + $p2 - 8; @saltset = ('a'..'z','A'..'Z','0'..'9','.','/'); $nsalt = $saltset[$wk % 64] . $saltset[$now % 64]; $ango = crypt($_[0], $nsalt); } ## --- パスワード照合処理 sub pwd_decode { if ($_[0] =~ /^\$1\$/) { $crptkey = 3; } # FreeBSDサーバ対応 else { $crptkey = 0; } $check = "no"; if (crypt($FORM{'pwd'}, substr($_[0],$crptkey,2)) eq "$_[0]") { $check = "yes"; } } ## --- ロックファイル(symlink関数) sub lock1 { local($retry) = 5; while (!symlink(".", $lockfile)) { if (--$retry <= 0) { &error("LOCK is BUSY"); } sleep(1); } } ## --- ロックファイル(open関数) sub lock2 { local($flag) = 0; foreach (1 .. 5) { unless (-e $lockfile) { open(LOCK,">$lockfile"); close(LOCK); $flag = 1; last; } else { sleep(1); } } if ($flag == 0) { &error("LOCK is BUSY"); } } ## --- ホスト名を取得 sub get_host { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq "$addr") { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2); } if ($host eq "") { $host = $addr; } } ## --- 自動リンク sub auto_link { $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1$2<\/a>/g; } ## --- メール送信 sub mail_to { # 送信内容を JISコード変換 &jcode'convert(*title,'jis'); &jcode'convert(*name,'jis'); &jcode'convert(*subj,'jis'); &jcode'convert(*comment,'jis'); if ($date_type == 1) { &jcode'convert(*date,'jis'); } # コメント本文の改行を復元 $comment =~ s/
/\n/ig; $comment =~ s/<//g; # sendmail起動 if (open(MAIL,"| $sendmail $mailto")) { print MAIL "To: $mailto\n"; # メールアドレスがない場合はダミーメールに置き換え if ($email eq "") { $email = 'nomail@xxx.xxx'; } print MAIL "From: $email\n"; print MAIL "Subject: $title [$subj]\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; print MAIL "TIME : $date\n"; print MAIL "HOST : $host\n"; print MAIL "NAME : $name\n"; print MAIL "MAIL : $email\n"; if ($url) { print MAIL "URL : http://$url\n"; } if (!$subj) { $subj = "no title"; } print MAIL "TITLE: $subj\n\n"; print MAIL "$comment\n"; close(MAIL); } } ## --- 過去ログ生成 sub pastlog { $new_flag = 0; open(NUM,"$pastno") || &error("Can't open $pastno"); $count = ; close(NUM); # 過去ログのファイル名を定義 $pastfile = "$past_dir\/$count\.html"; # 過去ログがない場合、新規に自動生成する unless(-e $pastfile) { &new_log; } if ($new_flag == 0) { open (DB,"$pastfile") || &error("Can't open $pastfile"); @past = ; close(DB); } # 規定の行数をオーバーすると、次ファイルを自動生成する if ($#past > $log_line) { &next_log; } $pst_line = $lines[$max-1]; $pst_line =~ s/\n//g; ($pnum,$pdate,$pname,$pemail,$psub,$pcom,$purl,$phost) = split(/<>/, $pst_line); if (!$psub) { $psub = "無題"; } if ($pemail) { $pname = "
$pname"; } if ($purl) { $purl = "http://$purl"; } # 自動リンク if ($autolink) { &auto_link($pcom); } #######################edit ; fukuzo start from here #################################### # 記事のレイアウト $html = <<"HTML";
[$pnum] $psub
$pdate
$pname

$pcom

$purl

HTML @news = (); foreach $line (@past) { if ($line =~ //i) { last; } if ($line =~ //i) { push (@news,"$html"); push (@news,"\n"); } else { push (@news,$line); } } #######################edit ; fukuzo up to here ######################################### push (@news,"\n\n"); open(DB,">$pastfile") || &error("Can't write $pastfile"); print DB @news; close(DB); }## --- 過去ログ完了 --- ## ## --- 過去ログ次ファイル生成ルーチン sub next_log { # 次ファイルのためのカウントアップ $count++; # カウントファイル更新 open(NUM,">$pastno") || &error("Can't write $pastno"); print NUM "$count"; close(NUM); $pastfile = "$past_dir\/$count\.html"; &new_log; } ## --- 新規過去ログファイル生成ルーチン sub new_log { $new_flag = 1; $past[0] = "過去ログ\n"; $past[1] = "\n"; $past[2] = "<\!--HAJIME-->\n"; $past[3] = "<\!--OWARI-->\n"; $past[4] = "\n"; # 新規過去ログファイルを生成更新 open(DB,">$pastfile") || &error("Can't write $pastfile"); print DB @past; close(DB); # パーミッションを666へ。 chmod(0666,"$pastfile"); }