#!/usr/bin/perl
# スレッド天国 ver.1.10, (C)Copyright 2001 OGATA TETSUJI
$masterkey = '878';
# ↑管理用パスワード(半角英数)を''の間に書いてください。

$thisfile = '';
# ↑掲示板が動かないときは''の間にhttp://から始まるURLを入力してください。
# 例 $thisfile = 'http://specters.net/cgipon/tengoku.cgi';


#--------------------------------------------------------------------------
#
#       掲示板のカスタマイズはブラウザ上からできますので、
#       これ以降は書き換える必要はありません。
#       まずはそのまま設置して動作確認を取るようにしてください。
#
#--------------------------------------------------------------------------


#==========================================================================
# [ Note ] # 著作権情報です。書き換えないでください。
#==========================================================================

$scriptname = 'スレッド天国'; # 書き換え不可
$version    = 'ver.1.10';     # 書き換え不可
$copyright  = '緒方哲治';     # 書き換え不可

#--------------------------------------------------------------------------
# [ 著作権・使用上の注意 ]
#
# このソフトウェア(以下「スレッド天国」と記述)は緒方哲治が作成しました。
# 著作権は緒方哲治に属します。(jcode.plを除く)
# 著作者の許可なく配布・販売することを禁止します。
#
# スレッド天国はフリーソフトです。
# スレッド天国を使用して発生したいかなる損害に対しても作者は責任を負いません。
# 改造は自由ですが、スクリプト内および表示されるHTML内にある著作者情報は削除・
# 変更しないでください。
# またCGIぽんへのリンク(以下)部分も削除・変更しないでください。
#   http://specters.net/cgipon/
#   http://specters.net/cgipon/tengoku/info/
#   http://specters.net/cgipon/tengoku/how2/
#
# perlはversion5以上を使用してください。
# データファイルは何らかの事故により破壊されることがありますので常にバックアッ
# プを取るよう心がけてください。
#
# CGIぽん  http://specters.net/cgipon/  緒方哲治  cgipon@specters.net


#==========================================================================
# [ 環境設定 ]
#==========================================================================

$jcode   = './jcode.pl';
$countia = './countia.pl';
$fn = $ENV{SCRIPT_NAME};
$fn =~ s/^.*\///;
$fn =~ s/\..*$//;
$logfile = "./logs/$fn.log";
$datfile = "./logs/$fn.dat";
$cookiename = $fn;
$infourl = 'http://specters.net/cgipon/tengoku/info/';
$how2url = 'http://specters.net/cgipon/tengoku/how2/';


#==========================================================================
# [ 更新チェック用 ]
#==========================================================================

if ($ENV{REQUEST_METHOD} eq 'HEAD'){
  my($ftime) = gmtime((stat $logfile)[9]);
  my(@tm) = split(/ +/, $ftime);
  my($lm) = "$tm[0], $tm[2] $tm[1] $tm[4] $tm[3] GMT";
  my($size) = -s $logfile;
  print "Content-type: text/html\r\n";
  print "Last-Modified: $lm\r\n";
  print "Accept-Ranges: bytes\r\n";
  print "Content-Length: $size\r\n\r\n";
  exit;
}


#==========================================================================
# [ 開始 ]
#==========================================================================

&CHECK_CODE;
&READ_FORM;
&READ_OPTION;
&CHECK_URL;
&CHECK_BROWSER;
&CHECK_DATA;
&COUNTIA;
&WRITE_DATA;
&READ_DATA;

if ($mobile eq 'h') {

  $back = $in{back_h};
  $hmsg = $in{hmsg_h};
  foreach ($back,$thisfile,$infourl) { s/^http://; }
  if    ($in{m} eq 'e') { &ONC_EXPAND; }
  elsif ($in{m} eq 's') { &ONC_SINGLE; }
  else                  { &ONC_LIST; }
  &ONC_PRINT;

} elsif ($mobile eq 'e') {

  $reload = qq(t=) . substr(time(),-4);
  $back = $in{back_e};
  $hmsg = $in{hmsg_e};
  print qq(Content-type: text/x-hdml;charset=Shift_JIS\n\n);
  if    ($in{m} eq 'e') { &HDML_EXPAND; }
  elsif ($in{m} eq 's') { &HDML_SINGLE; }
  elsif ($in{m} eq 'f') { &HDML_FORM; }
  else                  { &HDML_LIST; }

} elsif ($mobile) {

  $back = $in{"back_$mobile"};
  $hmsg = $in{"hmsg_$mobile"};
  if    ($in{m} eq 'e') { &CHTML_EXPAND; }
  elsif ($in{m} eq 's') { &CHTML_SINGLE; }
  elsif ($in{m} eq 'f') { &CHTML_FORM; }
  else                  { &CHTML_LIST; }
  &CHTML_PRINT;

} else {

  &HTML_HEADER;
  &HTML_SET;
  if ($in{m} eq 'l') {
    &HTML_LIST;
    &HTML_FORM;
  } elsif ($in{m} eq 't') {
    &HTML_THREAD;
    &HTML_FORM;
  } elsif ($in{m} eq 'e') {
    &HTML_EXPAND;
    &HTML_FORM;
  } elsif ($in{m} eq 's') {
    &HTML_SINGLE;
    &HTML_FORM;
  } elsif ($in{m} eq 'h') {
    &HTML_HOW2;
  } elsif ($in{m} eq 'p') {
    &HTML_PASS;
  }
  &HTML_FOOTER;

}
exit;


#==========================================================================
# [ ONC表示 ]
#==========================================================================

#--------------------------------------------------------------------------
# [ ONC内容表示 ]

sub ONC_EXPAND {

  my($key);

  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);

    &EXPAND_TITLE;
    foreach ($ttt,$nam) {
      s/&lt;/<</g;
      s/&gt;/>/g;
      s/&amp;/&/g;
    }
    $sel  .= qq(<SEL=$key[5];$thisfile?req=nam&sch=%5B$tnm%5D>$br);
    $ttt = qq(\[$tnm\]$ttt);
    $body .= qq($threadicon$ttt(全$#mes件)$br);
    $body .= qq($key[5]⇒このスレッドに返信$br);

    chomp $mes[1];
    my($mnm,$nam,$mtt,$mes,$tim,$new,$prev,$next)
      = @{&EXPAND_DATA_4M("$tnm>1>$mes[1]")};
    if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
    foreach ($mtt,$nam,$mes) {
      s/&lt;/<</g;
      s/&gt;/>/g;
      s/&amp;/&/g;
      &REMOVE_EMOJI($_);
    }
    $body .= qq($hrbr$new$mnm$mtt$nam($tim)$br$mes$br);
    if ($next) {
      $sel  .= qq(<SEL=41;$thisfile?sch=%5B$tnm-1%5D>$br);
      $body .= qq(41⇒全て読む$br);
    }

    $max = $#mes - $vne * $in{pne};
    if ($max - $vne > 1) {
      $pne = $in{pne} + 1;
      $sel  .= qq(<SEL=$key[4];$thisfile?sch=%5B$tnm%5D&pne=$pne>$br);
      $body .= qq($hrbr$key[4]⇒[) . ($max - $vne) . qq(]より前の記事$br);
    }
    for ($i = 2; $i <= $max; $i++) {
      if ($i <= $max - $vne) { next; }
      chomp $mes[$i];
      $key = $i + 40;
      my($mnm,$nam,$mtt,$mes,$tim,$new,$prev,$next)
       = @{&EXPAND_DATA_4M("$tnm>$i>$mes[$i]")};
      if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
      foreach ($mtt,$nam,$mes) {
        s/&lt;/<</g;
        s/&gt;/>/g;
        s/&amp;/&/g;
        &REMOVE_EMOJI($_);
      }
      $body .= qq($hrbr$new$mnm$mtt$nam($tim)$br$mes$br);
      if ($next) {
        $sel  .= qq(<SEL=$key;$thisfile?sch=%5B$tnm-$i%5D>$br);
        $body .= qq($key⇒全て読む$br);
      }
    }
    if ($#mes > $max) {
      $pne = $in{pne} - 1;
      $sel  .= qq(<SEL=$key[6];$thisfile?sch=%5B$tnm%5D&pne=$pne>$br);
      $body .= qq($hrbr$key[6]⇒[) . ($max + 1) . qq(]より後の記事$br);
    }
    $body .= qq($key[5]⇒このスレッドに返信$br);
    $sel  .= qq(<SEL=$key[2];$thisfile>$br);
    $body .= qq($hrbr$key[2]⇒戻る$br);
  }

}


#--------------------------------------------------------------------------
# [ ONC単一表示 ]

sub ONC_SINGLE {

  foreach (@log) {
    my($mnm,$nam,$mtt,$mes,$tim,$new,$prev,$next)
      = @{&EXPAND_DATA_4M("$_")};
    if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
    foreach ($mtt,$nam,$mes) {
      s/&lt;/<</g;
      s/&gt;/>/g;
      s/&amp;/&/g;
      &REMOVE_EMOJI($_);
    }
    if ($prev--) {
      $sel  .= qq(<SEL=$key[4];$thisfile?sch=%5B$in{sct}-$in{scn}%5D&dvn=$prev>$br);
      $body .= qq($key[4]⇒続き$br);
    }
    $body .= qq($new$mnm$mtt$nam($tim)$br$mes$br);
    if ($next) {
      $sel  .= qq(<SEL=$key[6];$thisfile?sch=%5B$in{sct}-$in{scn}%5D&dvn=$next>$br);
      $body .= qq($key[6]⇒続き$br);
    }
  }
  $sel  .= qq(<SEL=$key[2];$thisfile?sch=%5B$in{sct}%5D>$br);
  $body .= qq($hrbr$key[2]⇒戻る$br);

}


#--------------------------------------------------------------------------
# [ ONCリスト表示 ]

sub ONC_LIST {

  my($key) = 40;

  $body .= qq($in{bbstit}$br);
  if ($hmsg) { $body .= qq($hmsg$br); }
  $sel  .= qq(<SEL=$key[5];$thisfile?req=nam>$br);
  $body .= qq($hrbr$key[5]⇒新規テーマ投稿$br);

  if ($in{pnm} != 1) {
    my($pnm) = $in{pnm} - 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    $sel  .= qq(<SEL=$key[4];$thisfile?$query>$br);
    $body .= qq($key[4]⇒次の$in{vnm}件$br);
  }
  $body .= qq($hrbr);

  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);

    $key++;

    &EXPAND_TITLE;
    foreach ($ttt,$nam,$lst) {
      s/&lt;/<</g;
      s/&gt;/>/g;
      s/&amp;/&/g;
    }
    $sel  .= qq(<SEL=$key;$thisfile?sch=%5B$tnm%5D>$br);
    $ttt = qq(\[$tnm\]$ttt);
    if ($#mes == 1) {
      $body .= qq($key⇒$new$threadicon$ttt($#mes件)$nam $tim$br);
    } else {
      $body .= qq($key⇒$new$threadicon$ttt($#mes件)$lst $tim$arrowicon$nam$br);
    }
  }
  $body .= qq($hrbr);
  if ($in{pnm} < $pmx) {
    my($pnm) = $in{pnm} + 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    $sel  .= qq(<SEL=6;$thisfile?$query>$br);
    $body .= qq($key[6]⇒前の$in{vnm}件);
    if ($back) { $body .= qq($br); }
  }
  if ($back) {
    $sel  .= qq(<SEL=$key[2];$back>$br);
    $body .= qq($key[2]⇒トップページ$br);
  }
  if ($back || ($in{pnm} < $pmx)) { $body .= qq($hrbr); }
  $sel  .= qq(<SEL=$key[9];$infourl>$br);
  $body .= qq($key[9]⇒cgipon info$br);

}


#--------------------------------------------------------------------------
# [ ONC出力 ]

sub ONC_PRINT {

  if (!$in{req}) {
    $sel  .= qq(<SEL=20;$thisfile?req=end>$br);
    $body .= qq($hrbr) . qq(20⇒終了$br);
  }
  print qq(Content-Type: text/plain\n\n);
  print qq($ctrl);
  print qq(From: $thisfile\n);
  print qq(Subject: $in{bbstit}\n);
  print qq($inmd);
  print qq(Content-Type: Text/X-PmailDX\n\n);
  print qq($sel);
  if ($pdx{GI} >= 2) {
    print qq(<BODY=$in{coldef};bg=$in{colmbg}>\n);
    &jcode::z2h_sjis(\$body);
  }
  print "$form$body";
  exit;

}


#==========================================================================
# [ HDML表示 ]
#==========================================================================

#--------------------------------------------------------------------------
# [ HDML内容表示 ]

sub HDML_EXPAND {

  $in{bbstit} =~ s/\$/&dol;/g;
  $in{bbstit} =~ s/"/&quot;/g;
  print qq(<HDML version=3.0 ttl=0 markable=true>);
  print qq(<DISPLAY title="$in{bbstit}"><CENTER>$in{bbstit}$br);

  &EXPAND_4M;
  &jcode::z2h_sjis(\$body);
  print $body;

  print qq(</DISPLAY></HDML>);

}


#--------------------------------------------------------------------------
# [ HDML単一表示 ]

sub HDML_SINGLE {

  print qq(<HDML version=3.0 ttl=0 markable=true>);
  print qq(<DISPLAY title="$in{bbstit}"><CENTER>$in{bbstit}$br);

  &SINGLE_4M;
  &jcode::z2h_sjis(\$body);
  print $body;

  print qq(</DISPLAY></HDML>);

}


#--------------------------------------------------------------------------
# [ HDMLフォーム ]

sub HDML_FORM {

  if ($in{sct}) { $thisfile .= qq(?$reload&sch=%5B$in{sct}%5D); }
  else { $thisfile .= qq(?$reload); }
  jcode::euc2sjis(\$frm{nam});
  my($nam) = &URL_ENC($frm{nam});
  my($mal) = &URL_ENC($frm{mal});
  $mal ||= qq(\@ezweb.ne.jp);
  print qq(<HDML version=3.0 ttl=0 markable=true>);
  print qq(<NODISPLAY name=preset>);
  print qq(<ACTION type=accept task=go dest=#index);
  print qq( vars="nam=$nam&mal=$mal&tit=&mes=">);
  print qq(</NODISPLAY>);
  print qq(<CHOICE name=index>);
  print qq(<CE task=go dest=#innam label="名前">名前:\$nam);
  if ($in{ktimal}) {
    print qq(<CE task=go dest=#inmal label="メール">メール :\$mal);
  }
  print qq(<CE task=go dest=#intit label="タイトル">タイトル:\$tit);
  print qq(<CE task=go dest=#inmes label="内容">内容:\$mes);
  print qq(<CE task=go dest="$thisfile");
  print qq( postdata="nam=\$nam&mal=\$mal&tit=\$tit&mes=\$mes&cok=e">送信);
  print qq(<CE task=go dest="$thisfile">戻る</CHOICE>);
  print qq(<ENTRY name=innam key=nam default=\$nam>);
  print qq(<ACTION type=accept task=go dest=#index>名前</ENTRY>);
  if ($in{ktimal}) {
    print qq(<ENTRY name=inmal key=mal default=\$mal>);
    print qq(<ACTION type=accept task=go dest=#index);
    print qq( emptyok=true format="*m">メール</ENTRY>);
  }
  print qq(<ENTRY name=intit key=tit default=\$tit>);
  print qq(<ACTION type=accept task=go dest=#index emptyok=true>タイトル</ENTRY>);
  print qq(<ENTRY name=inmes key=mes default=\$mes>);
  print qq(<ACTION type=accept task=go dest=#index>内容</ENTRY>);
  print qq(</HDML>);

}


#--------------------------------------------------------------------------
# [ HDMLリスト ]

sub HDML_LIST {

  $in{bbstit} =~ s/\$/&dol;/g;
  print qq(<HDML version=3.0 ttl=0 markable=true>);
  print qq(<CHOICE title="$in{bbstit}" method=alpha>);
  print qq(<CENTER>$in{bbstit});
  if ($hmsg) { print qq(<LINE>$hmsg<WRAP>); } else { print qq($br); }
  print qq($hr<CE task=go dest="$thisfile?$reload&m=f">新規テーマ投稿);
  if ($in{pnm} != 1) {
    my($pnm) = $in{pnm} - 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print qq(<CE task=go dest="$thisfile?$query">次の$in{vnm}件);
  }
  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);

    &EXPAND_TITLE;
    foreach ($ttt,$nam,$lst) {
      s/\$/&dol;/g;
      s/"/&quot;/g;
    }
    print qq(<CE task=go dest="$thisfile?$reload&sch=%5B$tnm%5D">);
    $ttt = qq(\[$tnm\]$ttt);
    if ($#mes == 1) {
      $body = qq($new$threadicon$ttt($#mes件)$nam $tim);
    } else {
      $body = qq($new$threadicon$ttt($#mes件)$lst $tim$arrowicon$nam);
    }
    &jcode::z2h_sjis(\$body);
    print $body;
  }
  if ($in{pnm} < $pmx) {
    my($pnm) = $in{pnm} + 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print qq(<CE task=go dest="$thisfile?$query">前の$in{vnm}件);
  }
  if ($back) {
    print qq(<CE task=go dest="$back">トップページ);
  }
  print qq(<CE task=go dest="$infourl">cgipon info);
  print qq(</CHOICE></HDML>);

}


#==========================================================================
# [ CHTML表示 ]
#==========================================================================


#--------------------------------------------------------------------------
# [ CHTML内容表示 ]

sub CHTML_EXPAND {

  &EXPAND_4M;

}


#--------------------------------------------------------------------------
# [ CHTML単一表示 ]

sub CHTML_SINGLE {

  &SINGLE_4M;

}


#--------------------------------------------------------------------------
# [ CHTMLフォーム ]

sub CHTML_FORM {

  $body .= qq($hrbr<FORM action="$thisfile" method="$method">);
  if ($in{sct}) {
    $body .= qq(<INPUT type="hidden" name="sch" value="[$in{sct}]">);
  }
  $body .= qq(名前$br<INPUT type="text" name="nam" size=12>$br);
  if ($in{ktimal}) {
    $body .= qq(メール$br<INPUT type="text" name="mal" size=12 maxlength=64);
    if ($mobile eq 'j') {
      $body .= qq( value="\@jp-*.ne.jp" mode="alphabet");
    } elsif ($mobile eq 'i') {
      $body .= qq( value="\@docomo.ne.jp");
    } elsif ($mobile eq 'd') {
      $body .= qq( value="\@" astyle="3");
    }
    $body .= qq(>$br);
  }
  $body .= qq(タイトル$br<INPUT type="text" name="tit" size=12>$br);
  $body .= qq(内容$br<TEXTAREA name="mes" rows=4></TEXTAREA>$br);
  $body .= qq(<INPUT type="submit" value="送信">$br);
  $body .= qq(</FORM>);
  if ($in{sct}) { $thisfile .= qq(?sch=%5B$in{sct}%5D); }
  $body .= qq($hrbr$key[2]<A $href="$thisfile" $adkey=2$nnm>戻る</A>);

}


#--------------------------------------------------------------------------
# [ CHTMLリスト ]

sub CHTML_LIST {

  if ($hmsg) { $body .= qq(<MARQUEE loop=4>$hmsg</MARQUEE>); }
  $body .= qq($hr$key[5]<A $href="$thisfile?$reload&m=f" $adkey=5$nnm>);
  $body .= qq(新規テーマ投稿</A>);
  if ($in{pnm} != 1) {
    my($pnm) = $in{pnm} - 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    $body .= qq($br$key[6]<A $href="$thisfile?$query" $adkey=6$nnm>);
    $body .= qq(次の$in{vnm}件</A>);
  }
  $body .= qq($hr);
  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);

    &EXPAND_TITLE;
    foreach ($ttt,$nam,$lst) {
      s/"/&quot;/g;
    }
    $body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm%5D">);
    $ttt = qq(\[$tnm\]$ttt);
    if ($#mes == 1) {
      $body .= qq($new$threadicon$ttt($#mes件)</A>$nam $tim$br);
    } else {
      $body .= qq($new$threadicon$ttt($#mes件)</A>$lst $tim$arrowicon$nam$br);
    }
  }
  $body .= qq($hr);

  if ($in{pnm} < $pmx) {
    my($pnm) = $in{pnm} + 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    $body .= qq($key[4]<A $href="$thisfile?$query" $adkey=4$nnm>);
    $body .= qq(前の$in{vnm}件</A>);
    if ($back) { $body .= qq($br); }
  }
  if ($back) {
    $body .= qq($key[2]<A $href="$back" $adkey=2$nnm>トップページ</A>);
  }
  if ($back || ($in{pnm} < $pmx)) { $body .= qq($hr); }
  $body .= qq($key[9]<A $href="$infourl" $adkey=9$nnm>cgipon info</A>);

}


#--------------------------------------------------------------------------
# [ CHTML出力 ]

sub CHTML_PRINT {

  &jcode::z2h_sjis(\$body);
  $print = qq(<HTML><HEAD>);
  $print .= $title;
  $print .= qq(</HEAD>);
  $print .= qq(<BODY bgcolor=$in{colmbg} text=$in{coldef} link=$in{colanc}>);
  $print .= qq(<CENTER>$in{bbstit}</CENTER>);
  $print .= $body;
  $print .= qq(</BODY></HTML>);
  $length = length($print);
  print qq(Content-type: text/html\n);
  print qq(Content-length: $length\n\n);
  print qq($print);
  exit;

}


#==========================================================================
# [ ケータイ用展開ルーチン ]
#==========================================================================

#--------------------------------------------------------------------------
# [ 内容表示 ]

sub EXPAND_4M {

  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);

    &EXPAND_TITLE;
    foreach ($ttt,$nam) {
      if ($mobile eq 'e') { s/\$/&dol;/g; }
      s/"/&quot;/g;
    }
    $ttt = qq(\[$tnm\]$ttt);
    $body .= qq($threadicon$ttt(全$#mes件)$br);
    $body .= qq($key[5]<A $href="$thisfile?$reload&m=f&sch=%5B$tnm%5D");
    $body .= qq( $adkey=5$nnm>);
    $body .= qq(このスレッドに返信</A>$br);

    chomp $mes[1];
    if ($mobile eq 'e') { $mes[1] =~ s/\$/&dol;/g; }
    $mes[1] =~ s/"/&quot;/g;
    &REMOVE_EMOJI($mes[1]);
    my($mnm,$nam,$mtt,$mes,$tim,$new,$prev,$next)
      = @{&EXPAND_DATA_4M("$tnm>1>$mes[1]")};
    if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
    $body .= qq($hrbr$new$mnm$mtt$nam($tim)<BR>$mes$br);
    if ($next) {
      $body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm-1%5D">);
      $body .= qq(全て読む</A>$br);
    }

    $max = $#mes - $vne * $in{pne};
    if ($max - $vne > 1) {
      $pne = $in{pne} + 1;
      $body .= qq($hrbr$key[4]);
      $body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm%5D&pne=$pne");
      $body .= qq( $adkey=4$nnm>);
      $body .= qq([$tnm-) . ($max - $vne) . qq(]より前の記事</A>$br);
    }
    for ($i = 2; $i <= $max; $i++) {
      if ($i <= $max - $vne) { next; }
      chomp $mes[$i];
      if ($mobile eq 'e') { $mes[$i] =~ s/\$/&dol;/g; }
      $mes[$i] =~ s/"/&quot;/g;
      &REMOVE_EMOJI($mes[$i]);
      my($mnm,$nam,$mtt,$mes,$tim,$new,$prev,$next)
       = @{&EXPAND_DATA_4M("$tnm>$i>$mes[$i]")};
      if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
      $body .= qq($hrbr$new$mnm$mtt$nam($tim)<BR>$mes$br);
      if ($next) {
        $body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm-$i%5D">);
        $body .= qq(全て読む</A>$br);
      }
    }
    if ($#mes > $max) {
      $pne = $in{pne} - 1;
      $body .= qq($hrbr$key[6]);
      $body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm%5D&pne=$pne");
      $body .= qq( $adkey=6$nnm>);
      $body .= qq([$tnm-) . ($max + 1) . qq(]より後の記事</A>$br);
    }
    $body .= qq($hrbr$key[5]<A $href="$thisfile?$reload&m=f&sch=%5B$tnm%5D");
    $body .= qq( $adkey=5$nnm>);
    $body .= qq(このスレッドに返信</A>$br);
    $body .= qq($key[2]<A $href="$thisfile?$reload");
    $body .= qq( $adkey=2$nnm>戻る</A>$br);
  }

}


#--------------------------------------------------------------------------
# [ 単一表示 ]

sub SINGLE_4M {

  foreach (@log) {
    if ($mobile eq 'e') { s/\$/&dol;/g; }
    s/"/&quot;/g;
    &REMOVE_EMOJI($_);
    my($mnm,$nam,$mtt,$mes,$tim,$new,$prev,$next)
      = @{&EXPAND_DATA_4M("$_")};
    if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
    $body .= qq($hrbr);
    if ($prev--) {
      $body .= qq($key[4]<A $href="$thisfile?$reload&sch=%5B$in{sct}-$in{scn}%5D&dvn=$prev" $adkey=4$nnm>続き</A>$br);
    }
    $body .= qq($new$mnm$mtt$nam($tim)<BR>$mes$br);
    if ($next) {
      $body .= qq($key[6]<A $href="$thisfile?$reload&sch=%5B$in{sct}-$in{scn}%5D&dvn=$next" $adkey=6$nnm>続き</A>$br);
    }
  }
  $body .= qq($hrbr$key[2]<A $href="$thisfile?$reload&sch=%5B$in{sct}%5D");
  $body .= qq( $adkey=2$nnm>戻る</A>);

}


#--------------------------------------------------------------------------
# [ ログの展開 ]

sub EXPAND_DATA_4M {

  my($tnm,$num,$nam,$mal,$url,$ico,$col,$mtt,$mes,$key,$tim,$ipa,$rmh)
    = split(/>/,$_[0]);
  my($mnm,$prev,$next);

  $mnm = qq([$tnm-$num]);

  &jcode::euc2sjis(\$mtt);
  if ($mtt) { $mtt .= qq(/); }
  &jcode::euc2sjis(\$nam);
  if ($mal && ($in{ktomal} >= 3)) {
    if ($mobile eq 'h') {
      $nam = qq($nam($mal));
    } else {
      $nam = qq(<A $href="$mailto$mal">$nam</A>);
    }
  }
  if ($tim > time() - 60 * 60 * $in{newtim}) {
    $new = $newicon;
  } else {
    $new = '';
  }
  $tim = &GET_DATE($in{datefm},$tim);
  my(@dvm) = @{&DIV_STRING($mes,$dvm{$in{m}})};
  $mes = $dvm[$in{dvn}];
  $mes =~ s/&br;/$br/g;
  $mes = &AUTO_LINK_4M($mes);
  &jcode::euc2sjis(\$mes);

  if ($in{dvn} >= 1)      { $prev = $in{dvn}; }
  if ($dvm[$in{dvn} + 1]) { $next = $in{dvn} + 1; }

  return [$mnm,$nam,$mtt,$mes,$tim,$new,$prev,$next];

}


#==========================================================================
# [ HTML表示処理 ]
#==========================================================================

#--------------------------------------------------------------------------
# [ HTMLヘッダ ]

sub HTML_HEADER {

  my($styleback,$bodyback,$title,$hmsg_p,$msg);

  if ($in{imgbak}) {
    $styleback = qq( url($in{imgfld}/$in{imgbak}) fixed);
    $bodyback  = qq( background="$in{imgfld}/$in{imgbak}");
  }

  if ($in{imgtit}) {
    $title = qq(<IMG src="$in{imgfld}/$in{imgtit}" alt="$in{bbstit}"><BR><BR>);
  } else {
    $title = qq(<H1><FONT color="$in{colptt}">$in{bbstit}</FONT></H1>);
  }

  if ($in{hmsg_p}) {
    $hmsg_p = $in{hmsg_p};
    $hmsg_p =~s/<>/<BR>/g;
    $hmsg_p =~s/&lt;/</g;
    $hmsg_p =~s/&gt;/>/g;
    $hmsg_p =~s/&amp;/&/g;
    $hmsg_p = qq(<FONT size=2>$hmsg_p</FONT><BR>);
  }

  if (@msg) {
    $msg = qq(<FONT color="$in{colsch}"><B>).join("<BR>",@msg).qq(</B></FONT>);
  }

  if ($in{m} eq 'p') {
    $in{chrset} = "Shift_JIS";
  }

  print<<"_EOM_";
Content-type: text/html

<HTML lang=ja>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=$in{chrset}">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>$in{bbstit}</TITLE>
<LINK rev="made" href="mailto:cgipon\@specters.net">
<STYLE type="text/css">
  <!--
a       { color:$in{colanc}; text-decoration:none; }
a:hover { color:$in{colhov}; text-decoration:underline; }
body    { background:$in{colbak}$styleback; font-family:Osaka-等幅,MS ゴシック; }
  -->
</STYLE>
</HEAD>
<BODY bgcolor="$in{colbak}"$bodyback text="$in{coldef}" link="$in{colanc}" alink="$in{colanc}" vlink="$in{colanc}">
<BASEFONT size=3 face="MS ゴシック">
<CENTER>
<P>
$title
$hmsg_p
$msg
</P>
_EOM_

}


#--------------------------------------------------------------------------
# [ HTMLページ設定 ]

sub HTML_SET {

  my($lnk,$vfm);

  $frm{sch} =~ s/"/&quot;/g;
  &jcode::euc2sjis(\$frm{sch});

  $vnm{l} = [10,15,20,25,30,50,100];
  $vnm{t} = [5,10,15,20,25,30,50,100];
  $vnm{e} = [1,3,5,10,15,20,25,30];
  $vnm{s} = [1,3,5,10,15,20,25,30];

  if ($in{back_p}) {
    $lnk .= qq([<A href="$in{back_p}">トップページ</A>]\n);
  }

  if ($in{edt} || $in{scn} || @scw) {
    $lnk .= qq([<A href="$thisfile?t=0#form">新しい話題を書き込む!</A>]\n);
  } elsif ($in{sct}) {
    $lnk .= qq([<A href="#form">返信</A>]\n);
  } else {
    $lnk .= qq([<A href="#form">新しい話題を書き込む!</A>]\n);
  }


  if ($in{m} eq 'l') {
    $lnk .= qq(<B>[タイトルリスト]</B>\n);
  } else {
    $lnk .= qq([<A href="$thisfile?m=l">タイトルリスト</A>]\n);
  }

  if ($in{m} eq 't') {
    $lnk .= qq(<B>[話題別に見る]</B>\n);
  } else {
    $lnk .= qq([<A href="$thisfile?m=t">話題別に見る</A>]\n);
  }

  if (($in{m} eq 'e') && (!$frm{sch})) {
    $lnk .= qq(<B>[内容を\読む]</B>\n);
  } else {
    $lnk .= qq([<A href="$thisfile?m=e">内容を\読む</A>]\n);
  }

  if ($in{m} eq 'h') {
    $lnk .= qq(<B>[使い方]</B>\n);
  } else {
    $lnk .= qq([<A href="$thisfile?m=h">使い方</A>]\n);
  }

if ($in{m} eq 'l') {
    $lnk .= qq(<B>[ホームへ戻る]</B>\n);
  } else {
    $lnk .= qq([<A href="http://www.mmm878.com/jamy/">ホームへ戻る</A>]\n);
  }

  print<<"_EOM_";
<FONT size=2>
$lnk
</FONT>
_EOM_

  if ($in{m} =~ /[ltes]/) {
    print<<"_EOM_";
<FORM action="$thisfile" method="post">
<FONT size=2>
<INPUT type="hidden" name="cok" value="2">
<INPUT type="hidden" name="m" value="$in{m}">
<SELECT name="vn$in{m}">
_EOM_
  foreach (@{$vnm{$in{m}}}) {
    print qq(  <OPTION value="$_");
    if ($_ == $in{vnm}) { print qq( selected); }
    print qq(>$_\n);
  }
  print<<"_EOM_";
</SELECT>件ずつ
<SELECT name="pnm">
_EOM_
  for ($i = 1; $i <= $pmx; $i++) {
    print qq(  <OPTION value="$i");
    if ($i == $in{pnm}) { print qq( selected); }
    print qq(>$i\n);
  }
  print<<"_EOM_";
</SELECT>ページ目
<INPUT type="radio" name="aor" value="and" checked>and
<INPUT type="radio" name="aor" value="or">or
検索
<INPUT type="text" name="sch" value="$frm{sch}">
<INPUT type="submit" value="送信">
</FONT>
</FORM>
_EOM_
  }
  print qq(<HR width="$in{widtab}">\n);

}


#--------------------------------------------------------------------------
# [ HTMLリスト ]

sub HTML_LIST {

  my($siztxt,$coltab,$tabbdr);

  if ($in{siztxt}) { $siztxt = qq( size=2); }
  if ($in{coltab}) {
    $in{tabbdr} ||= 1;
    $coltab = qq( bordercolor="$in{coltab}");
  }
  if ($in{tabbdr}) { $tabbdr = qq( border="$in{tabbdr}"); }

  if ($in{pnm} != 1) {
    my($pnm) = $in{pnm} - 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print<<"_EOM_";
<CENTER>
<FONT size=2>
[<A href="$thisfile?$query">次の$in{vnm}件</A>&gt;
</FONT>
</CENTER>
<HR width="$in{widtab}">
_EOM_
  }

  print qq(\n);

    print<<"_EOM_";
<TABLE width="$in{widtab}"$tabbdr$coltab>
  <TR style="background:$in{coltbg};">
    <TD align="center">
      <FONT size=2>タイトル</FONT>
    </TD>
    <TD align="center">
      <FONT size=2>投稿者</FONT>
    </TD>
    <TD align="center">
      <FONT size=2>投稿件数</FONT>
    </TD>
    <TD align="center">
      <FONT size=2>最新投稿</FONT>
    </TD>
  </TR>
_EOM_
  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);

    &EXPAND_TITLE;

    print<<"_EOM_";
  <TR style="background:$in{coltbg};">
    <TD>
      <A href="$thisfile?sch=%5B$tnm%5D">
      <FONT size=2>[$tnm]</FONT>
      <FONT$siztxt color="$in{colttt}"><B>$ttt</B></FONT>
      </A>
    </TD>
    <TD>
      <FONT$siztxt color="$in{colnam}"><B>$nam</B></FONT>
    </TD>
    <TD>
      <FONT size=2>$#mes件</FONT>
    </TD>
    <TD>
      <FONT$siztxt color="$in{colnam}">$lst</FONT>
      <FONT size=2 color="$in{coltim}">$tim</FONT>
      $new
    </TD>
  </TR>
_EOM_
  }

  print qq(</TABLE>\n<BR>);

  if ($in{pnm} < $pmx) {
    my($pnm) = $in{pnm} + 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print<<"_EOM_";
<HR width="$in{widtab}">
<CENTER>
<FONT size=2>
&lt;<A href="$thisfile?$query">前の$in{vnm}件</A>]
</FONT>
</CENTER>
_EOM_
  }
  print qq(<HR width="$in{widtab}">\n<BR>\n);

}


#--------------------------------------------------------------------------
# [ HTMLスレッド ]

sub HTML_THREAD {

  my($siztxt,$coltab,$tabbdr);

  if ($in{siztxt}) { $siztxt = qq( size=2); }
  if ($in{coltab}) {
    $in{tabbdr} ||= 1;
    $coltab = qq( bordercolor="$in{coltab}");
  }
  if ($in{tabbdr}) { $tabbdr = qq( border="$in{tabbdr}"); }

  if ($in{pnm} != 1) {
    my($pnm) = $in{pnm} - 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print<<"_EOM_";
<CENTER>
<FONT size=2>
[<A href="$thisfile?$query">次の$in{vnm}件</A>&gt;
</FONT>
</CENTER>
<HR width="$in{widtab}">
_EOM_
  }

  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);

    &EXPAND_TITLE;

    print<<"_EOM_";
<TABLE width="$in{widtab}"$tabbdr$coltab cellpadding=4>
  <TR style="background:$in{coltbg}">
    <TD>
      <A href="$thisfile?sch=%5B$tnm%5D"><FONT size=2>[$tnm]</FONT>
      <FONT$siztxt color="$in{colttt}"><B>$ttt</B></FONT></A>
      <FONT$siztxt color="$in{colnam}"><B>$nam</B></FONT>
      <FONT size=2>- 最新投稿</FONT>
      <FONT$siztxt color="$in{colnam}">$lst</FONT>
      <FONT size=2 color="$in{coltim}">$tim</FONT>
      $new
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>
_EOM_

    for ($i = 1; $i <= $#mes; $i++) {
      chomp $mes[$i];
      &REMOVE_EMOJI($mes[$i]);
      my($nam,$mal,$url,$ico,$col,$mtt,$mes,$key,$tim,$ipa,$rmh)
        = split(/>/,$mes[$i]);
      my($new);

      if (!$mtt or $mtt =~ /^Re:/) {
        $mtt = (split(/>/,$mes[$i]))[6];
        $mtt =~ s/&br;/ /g;
        $mtt =~ s/ +/ /g;
        $mtt = ${&DIV_STRING($mtt,32,1)}[0];
      }
      &jcode::euc2sjis(\$mtt);
      if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
      &jcode::euc2sjis(\$nam);
      if ($tim > time() - 60 * 60 * $in{newtim}) {
        $new = $newicon;
      }
      $tim = &GET_DATE($in{datefm},$tim);

      print<<"_EOM_";
       <A href="$thisfile?sch=%5B$tnm-$i%5D"><FONT size=2>[$tnm-$i] </FONT>
      <FONT size=2 color="$in{colttt}">$mtt</FONT></A>
      <FONT size=2 color="$in{colnam}">$nam</FONT>
      <FONT size=2 color="$in{coltim}">$tim</FONT>
      $new
      <BR>
_EOM_
    }

    print qq(    </TD>\n  </TR>\n</TABLE>\n<BR>\n);
  }
  if ($in{pnm} < $pmx) {
    my($pnm) = $in{pnm} + 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print<<"_EOM_";
<HR width="$in{widtab}">
<CENTER>
<FONT size=2>
&lt;<A href="$thisfile?$query">前の$in{vnm}件</A>]
</FONT>
</CENTER>
_EOM_
  }
  print qq(<HR width="$in{widtab}">\n<BR>\n);

}


#--------------------------------------------------------------------------
# [ HTML内容表示 ]

sub HTML_EXPAND {

  my($siztxt,$coltab,$tabbdr);

  if ($in{siztxt}) { $siztxt = qq( size=2); }
  if ($in{coltab}) {
    $in{tabbdr} ||= 1;
    $coltab = qq( bordercolor="$in{coltab}");
  }
  if ($in{tabbdr}) { $tabbdr = qq( border="$in{tabbdr}"); }

  if ($in{pnm} != 1) {
    my($pnm) = $in{pnm} - 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print<<"_EOM_";
<CENTER>
<FONT size=2>
[<A href="$thisfile?$query">次の$in{vnm}件</A>&gt;
</FONT>
</CENTER>
<HR width="$in{widtab}">
_EOM_
  }

  foreach (@log) {
    local(@mes) = split(/<>/,$_);
    local($tnm) = $mes[0];
    local($ttt,$nam,$lst,$tim,$new);
    my($num,$hrl);

    &EXPAND_TITLE;

    if ((!$in{sct}) && ($in{vnm} != 1)) {
      $lnk = qq(<DIV align="right"><FONT size=2>)
           . qq(<A href="$thisfile?sch=%5B$tnm%5D">)
           . qq(&gt;&gt; この話題[$tnm]に返信</A></FONT></DIV>);
      $num = qq(<A href="$thisfile?sch=%5B$tnm%5D"><FONT size=2>)
           . qq([$tnm]</FONT></A>);
    } else {
      $in{sct} = $tnm;
      $num = qq(<FONT size=2>[$tnm]</FONT>);
    }

    print<<"_EOM_";
<TABLE width="$in{widtab}"$tabbdr$coltab cellpadding=4>
  <TR style="background:$in{coltbg}">
    <TD>
      $num
      <FONT$siztxt color="$in{colttt}"><B>$ttt</B></FONT>
      <FONT$siztxt color="$in{colnam}"><B>$nam</B></FONT>
      <FONT size=2>- 最新投稿</FONT>
      <FONT$siztxt color="$in{colnam}">$lst</FONT>
      <FONT size=2 color="$in{coltim}">$tim</FONT>
      $new
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>
_EOM_

    for ($i = 1; $i <= $#mes; $i++) {
      chomp $mes[$i];
      &REMOVE_EMOJI($mes[$i]);
      my($mnm,$nam,$mal,$url,$ico,$col,$mtt,$mes,$tim,$new,$ipa)
        = @{&EXPAND_DATA("$tnm>$i>$mes[$i]")};
      if (((split(/>/,$mes[$i]))[6] eq '&a;') ||
          ((split(/>/,$mes[$i]))[6] eq '&u;')) { next; }
        print<<"_EOM_";
      $hrl
      <TABLE width=100% cellpadding=8>
        <TR valign=top>
          <TD colspan=2>
            $ipa
            $mnm
            $mtt
            $nam
            $tim
            $new
            $url
            <BR>
          </TD>
        </TR>
        <TR valign=top>
          <TD>&nbsp;&nbsp;$ico</TD>
          <TD width=100%>$mes</TD>
        </TR>
      </TABLE>
_EOM_
      $hrl = qq(<HR>);
    }
    print<<"_EOM_";
      $lnk
    </TD>
  </TR>
</TABLE>
<BR>
_EOM_
  }
  if ($in{pnm} < $pmx) {
    my($pnm) = $in{pnm} + 1;
    $query = qq(m=$in{m}&vne=$in{vnm}&pnm=$pnm);
    print<<"_EOM_";
<HR width="$in{widtab}">
<CENTER>
<FONT size=2>
&lt;<A href="$thisfile?$query">前の$in{vnm}件</A>]
</FONT>
</CENTER>
_EOM_
  }
  print qq(<HR width="$in{widtab}">\n<BR>\n);

}


#--------------------------------------------------------------------------
# [ HTML単一表示 ]

sub HTML_SINGLE {

  my($siztxt,$coltab,$tabbdr);

  if ($in{siztxt}) { $siztxt = qq( size=2); }
  if ($in{coltab}) {
    $in{tabbdr} ||= 1;
    $coltab = qq( bordercolor="$in{coltab}");
  }
  if ($in{tabbdr}) { $tabbdr = qq( border="$in{tabbdr}"); }

  if ($in{pnm} != 1) {
    my($pnm) = $in{pnm} - 1;
    $query = qq(m=$in{m}&vns=$in{vnm}&pnm=$pnm);
    if (@scw) { $query .= qq(&sch=$frm{sch}&aor=$in{aor}); }
    print<<"_EOM_";
<CENTER>
<FONT size=2>
[<A href="$thisfile?$query">次の$in{vnm}件</A>&gt;
</FONT>
</CENTER>
<HR width="$in{widtab}">
_EOM_
  }

  foreach (@log) {
    chomp;
    &REMOVE_EMOJI($_);
    my($mnm,$nam,$mal,$url,$ico,$col,$mtt,$mes,$tim,$new,$ipa,$edt)
     = @{&EXPAND_DATA($_)};

    my($tnm,$num) = (split(/>/,$_))[0,1];
    my($lnk);

    if ((split(/>/,$_))[8] eq '&a;') {
      $ico = '';
      $mes = qq(<FONT size=2 color="$in{coltim}">)
           . qq(管理人により削除されました。</FONT>);
    } elsif ((split(/>/,$_))[8] eq '&u;') {
      $ico = '';
      $mes = qq(<FONT size=2 color="$in{coltim}">)
           . qq(投稿者により削除されました。</FONT>);
    }

    $lnk = qq(<DIV align="right"><FONT size=2>)
         . qq(<A href="$thisfile?sch=%5B$tnm%5D">)
         . qq(&gt;&gt; この話題[$tnm]を全て読む</A></FONT></DIV>);

    print<<"_EOM_";
<TABLE width="$in{widtab}"$tabbdr$coltab cellpadding=4>
  <TR style="background:$in{colmbg};">
    <TD>
      $ipa $mnm $mtt $nam $tim $new $url $edt<BR>
      <TABLE width=100% cellpadding=4>
        <TR valign=top>
          <TD>$ico</TD>
          <TD width=100%>$mes$lnk</TD>
        </TR>
      </TABLE>
    </TD>
  </TR>
</TABLE>
<BR>
_EOM_
  }

  if ($in{pnm} < $pmx) {
    my($pnm) = $in{pnm} + 1;
    $query = qq(m=$in{m}&vns=$in{vnm}&pnm=$pnm);
    if (@scw) { $query .= qq(&sch=$frm{sch}&aor=$in{aor}); }
    print<<"_EOM_";
<HR width="$in{widtab}">
<CENTER>
<FONT size=2>
&lt;<A href="$thisfile?$query">前の$in{vnm}件</A>]
</FONT>
</CENTER>
_EOM_
  }
  print qq(<HR width="$in{widtab}">\n<BR>\n);

}


#--------------------------------------------------------------------------
# [ スレッドタイトルの展開 ]

sub EXPAND_TITLE {

    chomp $mes[1];
    $ttt = (split(/>/,$mes[1]))[5];
    if (!$ttt) {
      $ttt = (split(/>/,$mes[1]))[6];
      $ttt =~ s/&br;/ /g;
      $ttt =~ s/(。。)+/。。/g;
      $ttt =~ s/ +/ /g;
      $ttt = ${&DIV_STRING($ttt,24,1)}[0];
    }
    &jcode::euc2sjis(\$ttt);
    if ($ttt eq '&a;') {
      $ttt = '管理人により削除されました。';
    } elsif ($ttt eq '&u;') {
      $ttt = '投稿者により削除されました。';
    }
    $nam = (split(/>/,$mes[1]))[0];
    &jcode::euc2sjis(\$nam);
    $lst = (split(/>/,$mes[-1]))[0];
    &jcode::euc2sjis(\$lst);

    $tim = (split(/>/,$mes[-1]))[8];
    if ($tim > time() - 60 * 60 * $in{newtim}) {
      $new = $newicon;
    }
    $tim = &GET_DATE($in{datefm},$tim);

    foreach ($ttt,$nam,$lst) {
      &REMOVE_EMOJI($_);
    }

}


#--------------------------------------------------------------------------
# [ ログの展開 ]

sub EXPAND_DATA {

  &REMOVE_EMOJI($_[0]);
  my($tnm,$num,$nam,$mal,$url,$ico,$col,$mtt,$mes,$key,$tim,$ipa,$rmh)
    = split(/>/,$_[0]);
  my(@icons) = split(/<>/,$in{icon_p});
  my(@color) = split(/<>/,$in{colm_p});
  my($mnm,$edt,$siztxt);

  if ($in{siztxt}) { $siztxt = qq( size=2); }

  $mnm = qq(<FONT size=2>[$tnm-$num]</FONT>);
  $mes =~ s/&br;/<BR>/g;
  $mes =~ s/ /&nbsp;/g;
  $mes =~ s/&nbsp;([^&])/ $1/g;
  $mes =~ s/> />&nbsp;/g;
  if (@scw) {
    foreach ($nam,$mtt,$mes) {
      s/\x96/<FONT color="$in{colsch}"><B>/g;
      s/\x97/<\/B><\/FONT>/g;
    }
  } elsif (!$in{scn}) {
    $mnm = qq(<A href="$thisfile?sch=%5B$tnm-$i%5D">$mnm</A>);
  }

  &jcode::euc2sjis(\$mtt);
  $mtt = qq(<FONT$siztxt color="$in{colttt}"><B>$mtt</B></FONT>);
  &jcode::euc2sjis(\$nam);
  if ($mal) { $nam = qq(<A href="mailto:$mal">$nam</A>); }
  $nam = qq(<FONT$siztxt color="$in{colnam}"><B>$nam</B></FONT>);
  if ($tim > time() - 60 * 60 * $in{newtim}) {
    $new = $newicon;
  } else {
    $new = '';
  }
  if (!$key) {
    $edt = qq(<FONT size=2>修正済み</FONT>);
  } elsif ($tim + $in{edtlim} * 60 >= time()) {
    if (!$in{edt}) {
      $edt = qq(<FONT size=2>)
           . qq(<A href="$thisfile?sch=%5B$tnm-$num%5D&edt=1">)
           . qq(修正</A></FONT>);
    }
  } else {
    $edt = qq(<FONT size=2>修正時間切れ</FONT>);
  }
  $tim = &GET_DATE($in{datefm},$tim);
  $tim = qq(<FONT size=2 color="$in{coltim}">$tim</FONT>);
  if ($url) {
    if ($in{lnkimg}) {
      $url = qq(<A href="http://$url" target="_blank">)
           . qq(<IMG src="$in{imgfld}/$in{lnkimg}" border=0></A>);
    } elsif ($in{lnktxt}) {
      $url = qq(<FONT size=2>)
           . qq([<A href="http://$url" target="_blank">$in{lnktxt}</A>])
           . qq(</FONT>);
    } else {
      $url = qq(<FONT size=2>)
           . qq([<A href="http://$url" target="_blank">http://$url</A>])
           . qq(</FONT>);
    }
  }
  if ($icons[0]) {
    $ico ||= (split(/=/,$icons[0]))[0];
    $ico = qq(<IMG src="$in{imgfld}/$ico">);
  } else {
    $ico = '';
  }
  if ($color[0]) {
    $col ||= $color[0];
  } else {
    $col = $in{coldef};
  }
  $mes = &AUTO_LINK($mes);
  &jcode::euc2sjis(\$mes);
  $mes = qq(<FONT$siztxt color="$col">$mes</FONT>);
  if ($rmh) { $ipa = qq($ipa($rmh)); }
  $ipa = qq(<!-- $ipa -->);

  return [$mnm,$nam,$mal,$url,$ico,$col,$mtt,$mes,$tim,$new,$ipa,$edt];

}


#--------------------------------------------------------------------------
# [ HTMLフォーム ]

sub HTML_FORM {

  if (!$in{edt} && $in{scn} || @scw) { return; }

  my($bra,$ket,$coltab,$tabbdr);

  if ($in{siztxt}) { $bra = qq(<FONT size=2>); $ket = qq(</FONT>); }
  if ($in{coltab}) {
    $in{tabbdr} ||= 1;
    $coltab = qq( bordercolor="$in{coltab}");
  }
  if ($in{tabbdr}) { $tabbdr = qq( border="$in{tabbdr}"); }

  my($hid,$ico,$col,$flag);

  if (($in{edt} >= 2) && $in{sct} && !$in{scn}) {
    print<<"_EOM_";
<TABLE width="$in{widtab}"$tabbdr$coltab>
  <TR style="background:$in{coltbg};">
    <TD>
      <CENTER>
      <B>スレッド[$in{sct}]一括削除</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>
      <CENTER>
<FORM action="$thisfile" method="post">
<INPUT type="hidden" name="m" value="$frm{m}">
<INPUT type="hidden" name="edt" value="2">
<INPUT type="hidden" name="sch" value="[$in{sct}]">
<INPUT type="checkbox" name="del">
<B>削除する</B>
<FONT size=2>管理者用パスワード</FONT>
<INPUT type="password" name="pky">
<INPUT type="submit" value="送信">
      </CENTER>
    </TD>
  </TR>
</TABLE>
</FORM>
      </CENTER>
    </TD>
  </TR>
</TABLE>
<HR width="$in{widtab}">
_EOM_
    return;
  } elsif ($in{edt}) {
    $hid .= qq(<INPUT type="hidden" name="sch" value="[$in{sct}-$in{scn}]">\n);
    $hid .= qq(<INPUT type="hidden" name="edt" value="$in{edt}">\n);
    $del .= qq(  <TR>\n    <TD colspan=2>\n);
    $del .= qq(      <INPUT type="checkbox" name="del">\n);
    $del .= qq(      <B>削除する</B>\n);
    if ($in{edt} == 2) {
      $del .= qq(      <FONT size=2>);
      $del .= qq(管理者用パスワード</FONT>\n);
      $del .= qq(      <INPUT type="password" name="pky">\n);
    }
    $del .= qq(    </TD>\n  </TR>\n);
    $ftt = qq(修正投稿);
    $btn = qq([$in{sct}-$in{scn}] を修正);
    ($frm{nam},$frm{mal},$frm{url},$frm{ico},$frm{col},$frm{tit},$frm{mes})
      = (split(/>/,$log[0]))[2...8];
    foreach (keys(%frm)) {
      $frm{$_} =~ s/&br;/\n/g;
    }
  } elsif ($in{sct}) {
    $hid .= qq(<INPUT type="hidden" name="sch" value="[$in{sct}]">\n);
    $hid .= qq(<INPUT type="hidden" name="cok" value="3">\n);
    $ftt = qq(この話題[$in{sct}]に返信);
    $btn = qq([$in{sct}] に返信);
  } else {
    $hid .= qq(<INPUT type="hidden" name="cok" value="3">);
    $ftt = qq(新規投稿);
    $btn = qq(新規投稿);
    $frm{tit} = '';
  }

  foreach (keys(%frm)) {
    if ($_ ne "mes") { $frm{$_} =~ s/"/&quot;/g; }
    &jcode::euc2sjis(\$frm{$_});
  }

  my(@icons) = split(/<>/,$in{icon_p});
  $flag = 0;
  if ($icons[1] || ($in{edt} && $frm{ico})) {
    if (!$frm{ico}) { ($frm{ico}) = split(/=/,$icons[0]); }
    $ico .= qq(  <TR>\n    <TD>$bra<B>$in{iconam}</B>$ket</TD>\n);
    if ($icons[0] =~ /=/) {
      $ico .= qq(    <TD>\n      <SELECT name="ico">\n);
      foreach (@icons) {
        my($name,$value) = split(/=/,$_);
        $ico .= qq(        <OPTION value="$name");
        if ($name eq $frm{ico}) { $ico .= qq( selected); $flag = 1; }
        $ico .= qq(>$value\n);
      }
      if (!$flag) {
        $ico .= qq(        <OPTION value="$frm{ico}" selected>$frm{ico}\n);
      }
      $ico .= qq(      </SELECT>\n    </TD>\n  </TR>\n);
    } else {
      $ico .= qq(    <TD>\n      <TABLE>\n        <TR>\n);
      foreach (@icons) {
        ($_) = split(/=/,$_);
        $ico .= qq(          <TD><IMG src="$in{imgfld}/$_"><BR>)
             .  qq(<INPUT type="radio" name="ico" value="$_");
        if ($_ eq $frm{ico}) { $ico .= qq( checked); $flag = 1; }
        $ico .= qq(></TD>\n);
      }
      if (!$flag) {
        $ico .= qq(          <TD><IMG src="$in{imgfld}/$frm{ico}"><BR>)
             . qq(<INPUT type="radio" name="ico" value="$frm{ico}" checked>\n)
             . qq(</TD>);
      }
      $ico .= qq(        </TR>\n      </TABLE>\n    </TD>\n  </TR>\n);
    }
  } elsif ($icons[0]) {
    ($frm{ico}) = split(/=/,$icons[0]);
    $hid .= qq(<INPUT type="hidden" name="ico" value="$frm{ico}">);
  }

  $flag = 0;
  my(@color) = split(/<>/,$in{colm_p});
  if ($color[1] || ($in{edt} && $frm{col})) {
    if (!$frm{col}) { ($frm{col}) = split(/=/,$color[0]); }
    $col .= qq(  <TR>\n    <TD>$bra<B> 色 </B>$ket</TD>\n);
    if ($color[0] =~ /=/) {
      $col .= qq(    <TD>\n      <SELECT name="col">\n);
      foreach (@color) {
        my($name,$value) = split(/=/,$_);
        $col .= qq(        <OPTION value="$name");
        if ($name eq $frm{col}) { $col .= qq( selected); $flag = 1; }
        $col .= qq(>$value\n);
      }
      if (!$flag) {
        $col .= qq(        <OPTION value="$frm{col}" selected>$frm{col}\n);
      }
      $col .= qq(      </SELECT>\n    </TD>\n  </TR>\n);
    } else {
      $col .= qq(    <TD>\n      <TABLE>\n        <TR>\n);
      foreach (@color) {
        s/=.*//;
        $col .= qq(          <TD><FONT size=2 color="$_">■)
             .  qq(</FONT><INPUT type="radio" name="col" value="$_");
        if ($_ eq $frm{col}) { $col .= qq( checked); $flag = 1; }
        $col .= qq(></TD>\n);
      }
      if (!$flag) {
        $col .= qq(          <TD>)
             .  qq(<FONT size=2 color="$frm{col}">■</FONT>)
             .  qq(<INPUT type="radio" name="col" value="$frm{col}" checked>)
             .  qq(</TD>\n);
      }
      $col .= qq(        </TR>\n      </TABLE>\n    </TD>\n  </TR>\n);
    }
  } elsif ($color[0]) {
    ($frm{col}) = split(/=/,$color[0]);
    $hid .= qq(<INPUT type="hidden" name="col" value="$frm{col}">);
  }

  if ($in{fmsg_p}) {
    $fmsg_p = $in{fmsg_p};
    $fmsg_p =~s/<>/<\/LI>\n        <LI>/g;
    $fmsg_p =~s/&lt;/</g;
    $fmsg_p =~s/&gt;/>/g;
    $fmsg_p =~s/&amp;/&/g;
    $fmsg_p=<<_EOM_
<TABLE>
  <TR>
    <TD>
      <FONT size=2>
      <UL>
        <LI>$fmsg_p</LI>
      </UL>
      </FONT>
    </TD>
  </TR>
</TABLE>
_EOM_
  }

  print<<"_EOM_";
<TABLE width="$in{widtab}"$tabbdr$coltab>
  <TR style="background:$in{coltbg};">
    <TD>
      <CENTER>
      <B><A name="form"><SPAN style="color:$in{coldef};">$ftt</SPAN></A></B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>
      <CENTER>
<FORM action="$thisfile" method="post">
<INPUT type="hidden" name="m" value="$frm{m}">
<INPUT type="hidden" name="vnl" value="$frm{vnl}">
<INPUT type="hidden" name="vnt" value="$frm{vnt}">
<INPUT type="hidden" name="vne" value="$frm{vne}">
$hid
<TABLE>
  <TR>
    <TD>$bra<B>名 前</B>$ket</TD>
    <TD><INPUT type="text" name="nam" size=24 value="$frm{nam}"></TD>
  </TR>
  <TR>
    <TD>$bra<B>メール</B>$ket</TD>
    <TD><INPUT type="text" name="mal" size=24 value="$frm{mal}"></TD>
  </TR>
  <TR>
    <TD>$bra<B>URL</B>$ket</TD>
    <TD><INPUT type="text" name="url" size=48 value="http://$frm{url}"></TD>
  </TR>
$ico
$col
  <TR>
    <TD>$bra<B>タイトル</B>$ket</TD>
    <TD><INPUT type="text" name="tit" size=48 value="$frm{tit}"></TD>
  </TR>
  <TR>
    <TD colspan=2>
      <TEXTAREA name="mes" cols=50 rows=12>$frm{mes}</TEXTAREA>
    </TD>
  </TR>
  $del
  <TR>
    <TD colspan=2>
      <CENTER>
      <INPUT type="submit" value="$btn">
      <INPUT type="reset" value="書き直す">
      </CENTER>
    </TD>
  </TR>
</TABLE>
</FORM>
$fmsg_p
      </CENTER>
    </TD>
  </TR>
</TABLE>
<BR>
<HR width="$in{widtab}">
_EOM_

}


#--------------------------------------------------------------------------
# [ HTML使い方 ]

sub HTML_HOW2 {

  my($bra,$ket,$coltab,$tabbdr);

  if ($in{siztxt}) {
    $bra = qq(\n      <FONT size=2>);
    $ket = qq(\n      </FONT>);
  }
  if ($in{coltab}) {
    $in{tabbdr} ||= 1;
    $coltab = qq( bordercolor="$in{coltab}");
  }
  if ($in{tabbdr}) { $tabbdr = qq( border="$in{tabbdr}"); }

  print<<"_EOM_";
<TABLE width="$in{widtab}">
  <TR>
    <TD>
      <CENTER>
<TABLE$tabbdr$coltab>
  <TR style="background:$in{coltbg};">
    <TD>
      <CENTER>
      <B>書き込みルール</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>$bra
      <UL>
        <LI>HTMLタグは使えません。</LI>
        <LI>URL、メールアドレスは自動的にリンクされます。</LI>
        <LI>[123]と書くと、その番号のスレッドへリンクされます。</LI>
        <LI>[12-3]と書くと、その番号の記事へリンクされます。</LI>
      </UL>$ket
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>
      <CENTER>
      <B>検索方法</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>$bra
      <UL>
        <LI>過去の記事の検索ができます。</LI>
        <LI>[123]と送信すれば、その番号のスレッドが読めます。</LI>
        <LI>[12-3]と送信すれば、その番号の記事が読めます。</LI>
        <LI>スペースで区切れば and検索 or検索 が可能\です。</LI>
      </UL>$ket
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>
      <CENTER>
      <B>修正方法</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>$bra
      <UL>
        <LI>投稿してから$in{edtlim}分以内の記事を一度だけ修正/削除することができます。</LI>
        <LI>修正したい記事を単独で表\示し、「修正」の文字をクリックすれば修正画面にいきます。</LI>
        <LI>修正/削除できるのは投稿した(クッキーを受け取った)パソ\コンのみです。</LI>
      </UL>$ket
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>
      <CENTER>
      <B>表\示モード</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>$bra
      <UL>
        <LI>
          ページを開いたときの表\示モードを設定できます。<BR>
           - <A href="$thisfile?m=l&cok=1">いつもタイトルリストモードで表\示する。</A><BR>
           - <A href="$thisfile?m=t&cok=1">いつもスレッド一覧モードで表\示する。</A><BR>
           - <A href="$thisfile?m=e&cok=1">いつも内容表\示モードで表\示する。</A>
        </LI>
        <LI>クッキーを受け取れるパソ\コンでのみ有効です。</LI>
        <LI>お気に入り登録時の状況によって、正しく設定されないことがあります。</LI>
      </UL>$ket
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>
      <CENTER>
      <B>モバイルアクセス</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD>$bra
      <UL>
        <LI>i-mode、EZweb、J-SKY、H"、ドットiに対応。</LI>
        <LI>ケータイからも同じURLでアクセスできます。</LI>
        <LI><A href="mailto:@?body=$thisfile">ケータイにURLを送る。</A></LI>
      </UL>$ket
    </TD>
  </TR>
</TABLE>
      </CENTER>
    </TD>
  </TR>
</TABLE>
<BR>
<HR width="$in{widtab}">$bra
さらに詳しく知りたい方は<A href="$how2url" target="_top">こちら</A>をご覧ください。$ket
<HR width="$in{widtab}">
_EOM_

}


#--------------------------------------------------------------------------
# [ HTMLオプション設定 ]

sub HTML_PASS {

  if ($in{pky} eq $masterkey) {

    my($coltab,$tabbdr);

    if ($in{coltab}) {
      $in{tabbdr} ||= 1;
      $coltab = qq( bordercolor="$in{coltab}");
    }
    if ($in{tabbdr}) { $tabbdr = qq( border="$in{tabbdr}"); }

    my(%pre,%txt,%defmod,@siztxt,@ktimal,@ktomal,@ktotel,@ktoemg,@ktioff);

    foreach (qw(
      bbstit admnam admmal logmax edtlim
      back_d back_e back_h back_i back_j back_p
      imgfld lnktxt iconam
      hmsg_d hmsg_e hmsg_h hmsg_i hmsg_j hmsg_p fmsg_p
      datefm newtim widtab tabbdr
      mlpath mailto
    )) {
      $pre{$_} = $in{$_};
      $txt{$_} = $in{$_};
      $txt{$_} =~ s/"/&quot;/g;
    }
    foreach (qw(imgtit imgbak)) {
      $def{$_} &&= qq($def{$_});
      $pre{$_} = $in{$_};
      $pre{$_} &&= qq($pre{$_});
      $txt{$_} = $in{$_};
      $txt{$_} =~ s/"/&quot;/g;
    }
    foreach (qw(lnkimg icon_d icon_e icon_h icon_i icon_j)) {
      $def{$_} &&= qq(<IMG src="$def{imgfld}/$def{$_}">$def{$_});
      $pre{$_} = $in{$_};
      $pre{$_} &&= qq(<IMG src="$in{imgfld}/$in{$_}">$pre{$_});
      $txt{$_} = $in{$_};
      $txt{$_} =~ s/"/&quot;/g;
    }
    foreach (qw(
      colbak coldef colptt colttt coltbg colmbg
      colanc colhov colnam coltim colsch
      colm_d colm_e colm_h colm_i colm_j coltab
    )) {
      $def{$_} = qq(<FONT size=2 color="$def{$_}">■</FONT>$def{$_});
      $pre{$_} = $in{$_};
      $pre{$_} = qq(<FONT size=2 color="$pre{$_}">■</FONT>$pre{$_});
      $txt{$_} = $in{$_};
      $txt{$_} =~ s/"/&quot;/g;
    }
    $defmod{$in{defmod}} = qq( checked);
    $siztxt[$in{siztxt}] = qq( checked);
    $ktimal[$in{ktimal}] = qq( checked);
    $ktomal[$in{ktomal}] = qq( checked);
    $ktotel[$in{ktotel}] = qq( checked);
    $ktoemg[$in{ktoemg}] = qq( checked);
    $ktioff[$in{ktioff}] = qq( checked);
    $logcia[$in{logcia}] = qq( checked);

    foreach (split(/<>/,$def{colm_p})) {
      s/=.*//;
      $def{col} .= qq(<FONT size=2 color="$_">■</FONT>);
    }
    foreach (split(/<>/,$in{colm_p})) {
      my($name,$value) = split(/=/,$_);
      $pre{col} .= qq(<FONT size=2 color="$name">■</FONT>);
      $txt{col} .= qq($_\n);
    }
    $txt{col} =~ s/"/&quot;/g;

    foreach (split(/<>/,$def{icon_p})) {
      s/=.*//;
      $def{ico} .= qq(<IMG src="$in{imgfld}/$_"> );
    }
    foreach (split(/<>/,$in{icon_p})) {
      my($name,$value) = split(/=/,$_);
      $pre{ico} .= qq(<IMG src="$in{imgfld}/$name"> );
      $txt{ico} .= qq($_\n);
    }
    $txt{ico} =~ s/"/&quot;/g;

    foreach (qw(hmsg_p fmsg_p)) {
      $def{$_} =~ s/<>/<BR>/g;
      $def{$_} =~ s/&lt;/</g;
      $def{$_} =~ s/&gt;/>/g;
      $def{$_} =~ s/&amp;/&/g;
      $pre{$_} = $in{$_};
      $pre{$_} =~ s/<>/<BR>/g;
      $pre{$_} =~ s/&lt;/</g;
      $pre{$_} =~ s/&gt;/>/g;
      $pre{$_} =~ s/&amp;/&/g;
      $txt{$_} =~ s/<>/\n/g;
    }

    print<<"_EOM_";
<FORM action="$thisfile" method="post">
<INPUT type="hidden" name="m" value="p">
<INPUT type="hidden" name="pky" value="$in{pky}">
<INPUT type="hidden" name="set" value="1">
<TABLE width="$in{widtab}"$tabbdr$coltab>
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>基本設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>掲示板の名前</B></TD>
    <TD>$def{bbstit}</TD>
    <TD>$pre{bbstit}</TD>
    <TD><INPUT type="text" name="bbstit" value="$txt{bbstit}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>管理人の名前</B></TD>
    <TD>$def{admnam}</TD>
    <TD>$pre{admnam}</TD>
    <TD><INPUT type="text" name="admnam" value="$txt{admnam}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>管理人のメールアドレス</B></TD>
    <TD>$def{admmal}</TD>
    <TD>$pre{admmal}</TD>
    <TD><INPUT type="text" name="admmal" value="$txt{admmal}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ログファイルの最大サイズ</B></TD>
    <TD>$def{logmax}</TD>
    <TD>$pre{logmax}</TD>
    <TD><INPUT type="text" name="logmax" value="$txt{logmax}">KB</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>デフォルトモード</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="defmod" value="l"$defmod{l}>タイトルリスト
      <INPUT type="radio" name="defmod" value="t"$defmod{t}>スレッド一覧
      <INPUT type="radio" name="defmod" value="e"$defmod{e}>内容表\示
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>修正可能\時間</B></TD>
    <TD>$def{edtlim}</TD>
    <TD>$pre{edtlim}</TD>
    <TD><INPUT type="text" name="edtlim" value="$txt{edtlim}">分</TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>URL設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ドットiのトップページ</B></TD>
    <TD>$def{back_d}</TD>
    <TD>$pre{back_d}</TD>
    <TD><INPUT type="text" name="back_d" value="$txt{back_d}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>EZwebのトップページ</B></TD>
    <TD>$def{back_e}</TD>
    <TD>$pre{back_e}</TD>
    <TD><INPUT type="text" name="back_e" value="$txt{back_e}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>H"のトップページ</B></TD>
    <TD>$def{back_h}</TD>
    <TD>$pre{back_h}</TD>
    <TD><INPUT type="text" name="back_h" value="$txt{back_h}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>i-modeのトップページ</B></TD>
    <TD>$def{back_i}</TD>
    <TD>$pre{back_i}</TD>
    <TD><INPUT type="text" name="back_i" value="$txt{back_i}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>J-SKYのトップページ</B></TD>
    <TD>$def{back_j}</TD>
    <TD>$pre{back_j}</TD>
    <TD><INPUT type="text" name="back_j" value="$txt{back_j}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>PCのトップページ</B></TD>
    <TD>$def{back_p}</TD>
    <TD>$pre{back_p}</TD>
    <TD><INPUT type="text" name="back_p" value="$txt{back_p}"></TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>デザイン・画像設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>画像フォルダ</B></TD>
    <TD>$def{imgfld}</TD>
    <TD>$pre{imgfld}</TD>
    <TD><INPUT type="text" name="imgfld" value="$txt{imgfld}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>タイトル画像</B></TD>
    <TD>$def{imgtit}</TD>
    <TD>$pre{imgtit}</TD>
    <TD><INPUT type="text" name="imgtit" value="$txt{imgtit}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>背景画像</B></TD>
    <TD>$def{imgbak}</TD>
    <TD>$pre{imgbak}</TD>
    <TD><INPUT type="text" name="imgbak" value="$txt{imgbak}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>リンク画像</B></TD>
    <TD>$def{lnkimg}</TD>
    <TD>$pre{lnkimg}</TD>
    <TD><INPUT type="text" name="lnkimg" value="$txt{lnkimg}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>リンクテキスト</B></TD>
    <TD>$def{lnktxt}</TD>
    <TD>$pre{lnktxt}</TD>
    <TD><INPUT type="text" name="lnktxt" value="$txt{lnktxt}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>アイコンの名前</B></TD>
    <TD>$def{iconam}</TD>
    <TD>$pre{iconam}</TD>
    <TD><INPUT type="text" name="iconam" value="$txt{iconam}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ドットi用のアイコン</B></TD>
    <TD>$def{icon_d}</TD>
    <TD>$pre{icon_d}</TD>
    <TD><INPUT type="text" name="icon_d" value="$txt{icon_d}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>EZweb用のアイコン</B></TD>
    <TD>$def{icon_e}</TD>
    <TD>$pre{icon_e}</TD>
    <TD><INPUT type="text" name="icon_e" value="$txt{icon_e}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>H"用のアイコン</B></TD>
    <TD>$def{icon_h}</TD>
    <TD>$pre{icon_h}</TD>
    <TD><INPUT type="text" name="icon_h" value="$txt{icon_h}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>i-mode用のアイコン</B></TD>
    <TD>$def{icon_i}</TD>
    <TD>$pre{icon_i}</TD>
    <TD><INPUT type="text" name="icon_i" value="$txt{icon_i}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>J-SKY用のアイコン</B></TD>
    <TD>$def{icon_j}</TD>
    <TD>$pre{icon_j}</TD>
    <TD><INPUT type="text" name="icon_j" value="$txt{icon_j}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD rowspan=3><B>PC用のアイコン</B></TD>
    <TD colspan=3>初期設定<BR>$def{ico}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>現在の設定<BR>$pre{ico}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>
      <TEXTAREA name="icon_p" cols=32 rows=8>$txt{ico}</TEXTAREA>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>投稿時間表\示</B></TD>
    <TD>$def{datefm}</TD>
    <TD>$pre{datefm}</TD>
    <TD><INPUT type="text" name="datefm" value="$txt{datefm}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>newマークを付ける時間</B></TD>
    <TD>$def{newtim}</TD>
    <TD>$pre{newtim}</TD>
    <TD><INPUT type="text" name="newtim" value="$txt{newtim}">時間</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>テキストサイズ</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="siztxt" value="0"$siztxt[0]>大
      <INPUT type="radio" name="siztxt" value="1"$siztxt[1]>小
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ページ幅</B></TD>
    <TD>$def{widtab}</TD>
    <TD>$pre{widtab}</TD>
    <TD><INPUT type="text" name="widtab" value="$txt{widtab}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>テーブル枠線の太さ</B></TD>
    <TD>$def{tabbdr}</TD>
    <TD>$pre{tabbdr}</TD>
    <TD><INPUT type="text" name="tabbdr" value="$txt{tabbdr}"></TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>色設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ページ背景色</B></TD>
    <TD>$def{colbak}</TD>
    <TD>$pre{colbak}</TD>
    <TD><INPUT type="text" name="colbak" value="$txt{colbak}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>デフォルト文字色</B></TD>
    <TD>$def{coldef}</TD>
    <TD>$pre{coldef}</TD>
    <TD><INPUT type="text" name="coldef" value="$txt{coldef}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ページタイトル文字色</B></TD>
    <TD>$def{colptt}</TD>
    <TD>$pre{colptt}</TD>
    <TD><INPUT type="text" name="colptt" value="$txt{colptt}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>スレッドタイトル背景色</B></TD>
    <TD>$def{coltbg}</TD>
    <TD>$pre{coltbg}</TD>
    <TD><INPUT type="text" name="coltbg" value="$txt{coltbg}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>メッセージタイトル文字色</B></TD>
    <TD>$def{colttt}</TD>
    <TD>$pre{colttt}</TD>
    <TD><INPUT type="text" name="colttt" value="$txt{colttt}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>メッセージ背景色</B></TD>
    <TD>$def{colmbg}</TD>
    <TD>$pre{colmbg}</TD>
    <TD><INPUT type="text" name="colmbg" value="$txt{colmbg}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>アンカー文字色</B></TD>
    <TD>$def{colanc}</TD>
    <TD>$pre{colanc}</TD>
    <TD><INPUT type="text" name="colanc" value="$txt{colanc}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>アンカーポイント時文字色</B></TD>
    <TD>$def{colhov}</TD>
    <TD>$pre{colhov}</TD>
    <TD><INPUT type="text" name="colhov" value="$txt{colhov}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>投稿者名文字色</B></TD>
    <TD>$def{colnam}</TD>
    <TD>$pre{colnam}</TD>
    <TD><INPUT type="text" name="colnam" value="$txt{colnam}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>投稿時間文字色</B></TD>
    <TD>$def{coltim}</TD>
    <TD>$pre{coltim}</TD>
    <TD><INPUT type="text" name="coltim" value="$txt{coltim}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>被検索語文字色</B></TD>
    <TD>$def{colsch}</TD>
    <TD>$pre{colsch}</TD>
    <TD><INPUT type="text" name="colsch" value="$txt{colsch}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ドットi投稿の文字色</B></TD>
    <TD>$def{colm_d}</TD>
    <TD>$pre{colm_d}</TD>
    <TD><INPUT type="text" name="colm_d" value="$txt{colm_d}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>EZweb投稿の文字色</B></TD>
    <TD>$def{colm_e}</TD>
    <TD>$pre{colm_e}</TD>
    <TD><INPUT type="text" name="colm_e" value="$txt{colm_e}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>H"投稿の文字色</B></TD>
    <TD>$def{colm_h}</TD>
    <TD>$pre{colm_h}</TD>
    <TD><INPUT type="text" name="colm_h" value="$txt{colm_h}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>i-mode投稿の文字色</B></TD>
    <TD>$def{colm_i}</TD>
    <TD>$pre{colm_i}</TD>
    <TD><INPUT type="text" name="colm_i" value="$txt{colm_i}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>J-SKY投稿の文字色</B></TD>
    <TD>$def{colm_j}</TD>
    <TD>$pre{colm_j}</TD>
    <TD><INPUT type="text" name="colm_j" value="$txt{colm_j}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD rowspan=3><B>PC投稿の文字色</B></TD>
    <TD colspan=3>初期設定<BR>$def{col}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>現在の設定<BR>$pre{col}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>
      <TEXTAREA name="colm_p" cols=32 rows=8>$txt{col}</TEXTAREA>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>テーブル枠線の色</B></TD>
    <TD>$def{coltab}</TD>
    <TD>$pre{coltab}</TD>
    <TD><INPUT type="text" name="coltab" value="$txt{coltab}"></TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>文字設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>ドットiのタイトル下コメント</B></TD>
    <TD>$def{hmsg_d}</TD>
    <TD>$pre{hmsg_d}</TD>
    <TD><INPUT type="text" name="hmsg_d" value="$txt{hmsg_d}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>EZwebのタイトル下コメント</B></TD>
    <TD>$def{hmsg_e}</TD>
    <TD>$pre{hmsg_e}</TD>
    <TD><INPUT type="text" name="hmsg_e" value="$txt{hmsg_e}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>H"のタイトル下コメント</B></TD>
    <TD>$def{hmsg_h}</TD>
    <TD>$pre{hmsg_h}</TD>
    <TD><INPUT type="text" name="hmsg_h" value="$txt{hmsg_h}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>i-modeのタイトル下コメント</B></TD>
    <TD>$def{hmsg_i}</TD>
    <TD>$pre{hmsg_i}</TD>
    <TD><INPUT type="text" name="hmsg_i" value="$txt{hmsg_i}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>J-SKYのタイトル下コメント</B></TD>
    <TD>$def{hmsg_j}</TD>
    <TD>$pre{hmsg_j}</TD>
    <TD><INPUT type="text" name="hmsg_j" value="$txt{hmsg_j}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD rowspan=3><B>PCのタイトル下コメント</B></TD>
    <TD colspan=3>初期設定<BR>$def{hmsg_p}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>現在の設定<BR>$pre{hmsg_p}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>
      <TEXTAREA name="hmsg_p" cols=32 rows=8>$txt{hmsg_p}</TEXTAREA>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD rowspan=3><B>PCのフォーム下コメント</B></TD>
    <TD colspan=3>初期設定<BR>$def{fmsg_p}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>現在の設定<BR>$pre{fmsg_p}</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD colspan=3>
      <TEXTAREA name="fmsg_p" cols=32 rows=8>$txt{fmsg_p}</TEXTAREA>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>ケータイ入出力設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>メールアドレスの入力</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="ktimal" value="0"$ktimal[0]>なし
      <INPUT type="radio" name="ktimal" value="1"$ktimal[1]>あり
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>メールアドレスの出力</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="ktomal" value="0"$ktomal[0]>なし(完全消去)<BR>
      <INPUT type="radio" name="ktomal" value="1"$ktomal[1]>あり<BR>
      <INPUT type="radio" name="ktomal" value="2"$ktomal[2]>投稿者メールアドレスリンク<BR>
      <INPUT type="radio" name="ktomal" value="3"$ktomal[3]>本文メールアドレスリンク<BR>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>電話番号の出力</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="ktotel" value="0"$ktotel[0]>消去する<BR>
      <INPUT type="radio" name="ktotel" value="1"$ktotel[1]>消去しない<BR>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>絵文字の出力</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="ktoemg" value="0"$ktoemg[0]>なし(完全消去)<BR>
      <INPUT type="radio" name="ktoemg" value="1"$ktoemg[1]>あり(表\示可能\端末のみ)<BR>
    </TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>H"の入力方式</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="ktioff" value="0"$ktioff[0]>オンライン<BR>
      <INPUT type="radio" name="ktioff" value="1"$ktioff[1]>オフライン(内容入力時に一旦回線が切れます)<BR>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>sendmail設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>sendmailのパス</B></TD>
    <TD>$def{mlpath}</TD>
    <TD>$pre{mlpath}</TD>
    <TD><INPUT type="text" name="mlpath" value="$txt{mlpath}"></TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>送信先メールアドレス</B></TD>
    <TD>$def{mailto}</TD>
    <TD>$pre{mailto}</TD>
    <TD><INPUT type="text" name="mailto" value="$txt{mailto}"></TD>
  </TR>
_EOM_
  if (-r $countia) {
    print<<"_EOM_";
  <TR style="background:$in{coltbg};">
    <TD colspan=4>
      <CENTER>
      <B>COUNTIA設定</B>
      </CENTER>
    </TD>
  </TR>
  <TR style="background:$in{coltbg};">
    <TD>設定名</TD>
    <TD>初期設定</TD>
    <TD>現在の設定</TD>
    <TD>変更欄</TD>
  </TR>
  <TR style="background:$in{colmbg};">
    <TD><B>アクセスログ</B></TD>
    <TD colspan=3>
      <INPUT type="radio" name="logcia" value="0"$logcia[0]>取らない<BR>
      <INPUT type="radio" name="logcia" value="1"$logcia[1]>取る<BR>
    </TD>
  </TR>
_EOM_
  }
  print<<"_EOM_";
  <TR>
    <TD colspan=4>
      <CENTER>
      <INPUT type="submit" value="送信する">
      <INPUT type="reset" value="リセット">
      </CENTER>
    </TD>
  </TR>
</TABLE>
</FORM>
<HR width="$in{widtab}">
_EOM_

  } else {
    print<<"_EOM_";
<FORM action="$thisfile" method="post">
<INPUT type="hidden" name="m" value="p">
<FONT size=2>管理者用パスワード</FONT>
<INPUT type="password" name="pky">
<INPUT type="submit" value="送信">
</FORM>
<HR width="$in{widtab}">
_EOM_
  }

}


#--------------------------------------------------------------------------
# [ HTMLフッタ ] # 著作権情報の部分は書き換えないでください。

sub HTML_FOOTER {

  my($tim,$adm,$nam);

  $tim = qq([) . &GET_DATE() . qq(] $in{bbstit}\n);
  if ($in{sct} && !$in{scn}) {
    $adm = qq(<A href="$thisfile?sch=%5B$in{sct}%5D&edt=2">)
         . qq(<FONT color="$in{coldef}" style="text-decoration:none;">)
         . qq(管理人</FONT></A>\n);
  } elsif ($in{scn} && !$in{edt}) {
    $adm = qq(<A href="$thisfile?sch=%5B$in{sct}-$in{scn}%5D&edt=2">)
         . qq(<FONT color="$in{coldef}" style="text-decoration:none;">)
         . qq(管理人</FONT></A>\n);
  } else {
    $adm = qq(<A href="$thisfile?m=p">)
         . qq(<FONT color="$in{coldef}" style="text-decoration:none;">)
         . qq(管理人</FONT></A>\n);
  }
  $nam = qq(<A href="mailto:$in{admmal}?subject=$in{bbstit}">)
       . qq($in{admnam}</A><BR>\n);
  $cpr = qq(<A href="http://specters.net/cgipon/" target="_top">)
       . qq($scriptname</A> $version\n);

  print<<"_EOM_";
<TABLE width="$in{widtab}">
  <TR>
    <TD align="right">
      <FONT size=2>$tim$adm$nam$cpr</FONT>
    </TD>
  </TR>
</TABLE>
</CENTER>
</BASEFONT>
</BODY>
</HTML>
_EOM_

}


#==========================================================================
# [ バックグラウンド処理 ]
#==========================================================================

#--------------------------------------------------------------------------
# [ コードのチェック ]

sub CHECK_CODE {

  -r $jcode or &DIE("jcode.plがありません。");
  require $jcode;
  my(@charset) = ('euc-jp','iso-2022-jp','Shift_JIS');
  $charset = $charset[ord(substr($copyright,6))%4];
  $charset or &DIE("文字コードが認識できません。");

}


#--------------------------------------------------------------------------
# [ フォームの読み込み ]

sub READ_FORM {

  read(STDIN, my($post), $ENV{CONTENT_LENGTH});
  my($get) = $ENV{QUERY_STRING};
  if ($post && $get) { $in = join('&',$post,$get); }
  else               { $in = qq($post$get); }
  my(@pairs) = split(/&/,$in);
  foreach (@pairs) {
    my($name,$value) = split(/=/,$_,2);
    $value = &URL_DEC($value);
    $value = &REP_EMOJI($value);
    &jcode::h2z_sjis(\$value);
    if ($name eq 'sch') { $value =~ s/ / /g; }
    &jcode::sjis2euc(\$value);
    $in{$name} = $value;
  }
}


#--------------------------------------------------------------------------
# [ 絵文字の10進コードへの置き換え ]

sub REP_EMOJI {

  # sjisから他の文字コードに変換する前に使用すること
  my($str) = $_[0];
  $str =~ s/\G((?:[\x80-\x9f\xe0-\xf7\xfa-\xfc][\x40-\xff]|[\x00-\x7f])*?)([\xf8\xf9][\x40-\xff]|[\xf0-\xf4][\x40-\xff])/$1.'&#'.unpack('n',$2).';'/eg;
  return $str;

}


#--------------------------------------------------------------------------
# [ 設定の読み込み ]

sub READ_OPTION {

  # デフォルトの項目設定では <> が改行を示しています。
  %def = (
    'bbstit' => 'スレッド天国',
    'admnam' => '',
    'admmal' => '',
    'logmax' => '500',
    'defmod' => 't',
    'edtlim' => '30',
    'chrset' => "$charset",
    'back_d' => '',
    'back_e' => '',
    'back_h' => '',
    'back_i' => '',
    'back_j' => '',
    'back_p' => '',
    'hmsg_d' => '',
    'hmsg_e' => '',
    'hmsg_h' => '',
    'hmsg_i' => '',
    'hmsg_j' => '',
    'hmsg_p' => '',
    'fmsg_p' => '',
    'imgfld' => './img',
    'imgtit' => '',
    'imgbak' => '',
    'iconam' => 'アイコン',
    'icon_d' => '',
    'icon_e' => '',
    'icon_h' => '',
    'icon_i' => '',
    'icon_j' => '',
    'icon_p' => '',
    'colbak' => '#eeeeee',
    'coldef' => '#333333',
    'colptt' => '#000000',
    'colttt' => '#003366',
    'coltbg' => '#e0e0e0',
    'colmbg' => '#ffffff',
    'colanc' => '#333399',
    'colhov' => '#ff3333',
    'colnam' => '#339900',
    'coltim' => '#996633',
    'colsch' => '#cc0000',
    'colm_d' => '#990099',
    'colm_e' => '#009900',
    'colm_h' => '#660000',
    'colm_i' => '#999900',
    'colm_j' => '#000033',
    'colm_p' => '',
    'coltab' => '',
    'datefm' => 'yyyy/MM/dd(DDD)HH:mm',
    'newtim' => '24',
    'siztxt' => '0',
    'widtab' => '80%',
    'tabbdr' => '',
    'lnkimg' => '',
    'lnktxt' => '',
    'ktimal' => '0',
    'ktomal' => '0',
    'ktotel' => '0',
    'ktoemg' => '0',
    'ktioff' => '0',
    'mlpath' => '',
    'mailto' => '',
    'logcia' => '0',
  );

  if ($in{set} && ($in{pky} eq $masterkey)) {
    foreach ($in{icon_p},$in{colm_p},$in{hmsg_p},$in{fmsg_p}) {
      s/\x0D\x0A/\n/g;
      tr/\r/\n/;
      s/^\n+//g;
      s/\n+$//g;
      s/\n+/<>/g;
    }
    $in{imgfld} =~ s/\/$//;
    &LOCK_FILE("$datfile.dir");
    open (OPT,">$datfile")
      or &DIE("ログフォルダのパーミッションを確認してください。");
    foreach (keys(%def)) {
      &jcode::euc2sjis(\$in{$_});
      print OPT "$_<>$in{$_}\n";
    }
    close (OPT);
    &UNLOCK_FILE("$datfile.dir");
  } else {
    if (open (OPT,"<$datfile")) {
      foreach (<OPT>) {
        chomp;
        my($name,$value) = split(/<>/,$_,2);
        $in{$name} = $value;
      }
    } else {
      open (OPT, ">$datfile")
      or &DIE("ログフォルダのパーミッションを確認してください。");
    }
  }

  foreach (keys(%def)) {
    $in{$_} ||= $def{$_};
  }

  if (!$in{admnam} || !$in{admmal}) { $in{m} = 'p'; }

}


#--------------------------------------------------------------------------
# [ URLのチェック ]

sub CHECK_URL {

  $thisfile ||= 'http://' . $ENV{SERVER_NAME} . $ENV{SCRIPT_NAME};
  $thisfile =~ s/\?\S+$//;
  if ($ENV{HTTP_REFERER} eq $in{httprf}) { $referer = 1; }

}


#--------------------------------------------------------------------------
# [ ブラウザのチェック ]

sub CHECK_BROWSER {

  my(@ua) = split(/\//,$ENV{HTTP_USER_AGENT});

  if ($ua[0] eq 'J-PHONE') {
    $mobile = 'j';
    $adkey = 'directkey';
    $imgext = '.png';
    $hr = qq(<HR>);
    $br = qq(<BR>);
    $hrbr = $hr;
    $href = 'href';
    $mailto = 'mailto:';
    if ($ua[1] <= 2) {
      $method = 'get';
    } else {
      $method = 'post';
      $title = qq(<TITLE>$in{bbstit}</TITLE>);
      @key = (
        "\x1B\$FE\x0F",
        "\x1B\$F<\x0F",
        "\x1B\$F=\x0F",
        "\x1B\$F>\x0F",
        "\x1B\$F?\x0F",
        "\x1B\$F@\x0F",
        "\x1B\$FA\x0F",
        "\x1B\$FB\x0F",
        "\x1B\$FC\x0F",
        "\x1B\$FD\x0F"
      );
      $nnm = qq( nonumber);
    }
    $referer = 1;

    $newicon = qq(\x1B\$E/\x0F);
    $threadicon = qq(\x1B\$Eh\x0F);
    $arrowicon = qq(\x1B\$FU\x0F);
    $in{datefm} = qq(M/d HH:mm);
    $in{vnl} = 10;
    $vne = 5;
    $dvm{e} = 800;
    $dvm{s} = 4000;
  }
  elsif ($ua[0] eq 'DoCoMo') {
    $mobile = 'i';
    $adkey = 'accesskey';
    $imgext = '.gif';
    $hr = qq(<HR>);
    $br = qq(<BR>);
    $hrbr = $hr;
    $href = 'href';
    $mailto = 'mailto:';
    @key = ("\xF9\x90","\xF9\x87","\xF9\x88","\xF9\x89","\xF9\x8A",
            "\xF9\x8B","\xF9\x8C","\xF9\x8D","\xF9\x8E","\xF9\x8F");
    $method = 'post';
    $title = qq(<TITLE>$in{bbstit}</TITLE>);
    $referer = 1;

    $newicon = "\xF9\xA0";
    $threadicon = "\xF8\xE4";
    $arrowicon = qq(←);
    $in{datefm} = qq(M/d HH:mm);
    $in{vnl} = 10;
    $vne = 5;
    $dvm{e} = 600;
    $dvm{s} = 3000;
  }
  elsif (($ua[0] eq 'PDXGW') || ($ua[0] eq 'Ginga')) {
    $mobile = 'h';
    $imgext = '.bmp';
    $ua[1] =~ s/ //g;
    ($ua[1],$pdx) = split(/\(/,$ua[1]);
    $pdx =~ s/\)$//;
    $pdx ||= 'TX=6;TY=3;GX=72;GY=36;C=G2;G=B2;GI=0';
    @pdx = split(/;/,$pdx);
    foreach (@pdx) {
      my($name,$value) = split(/=/,$_);
      $pdx{$name} = $value;
    }
    $hr = '-' x $pdx{TX};
    $br = qq(\n);
    $hrbr = qq($hr$br);
    $referer = 1;
    for ($i = 0; $i <= 9; $i++) { $key[$i] = qq($i); }

    $newicon = qq(<#FINE>);
    $threadicon = qq(<#NOTE>);
    $arrowicon = qq(←);
    $in{datefm} = qq(M/d HH:mm);
    $in{vnl} = 10;
    $vne = 5;
    $dvm{e} = 800;
    $dvm{s} = 3000;
  }
  elsif ($ua[0] eq 'UP.Browser') {
    $mobile = 'e';
    $adkey = 'accesskey';
    if ($ENV{HTTP_X_UP_DEVCAP_ISCOLOR}) {
      $imgext = '.png';
      $in{vnl} = 10;
      $vne = 5;
      $dvm{e} = 800;
      $dvm{s} = 5000;
    } else {
      $imgext = '.bmp';
      $in{vnl} = 5;
      $vne = 2;
      $dvm{e} = 250;
      $dvm{s} = 800;
    }
    if ($ENV{HTTP_X_UP_DEVCAP_SCREENCHARS}) {
      ($ez{TX},$ez{TY}) = split(/,/,$ENV{HTTP_X_UP_DEVCAP_SCREENCHARS});
      $hr = qq(-) x $ez{TX};
    } else {
      $hr = qq(------------);
    }
    $br = qq(<BR>);
    $hrbr = qq($hr$br);
    $href = 'task=go dest';
    if ($ENV{HTTP_X_UP_FAX_LIMIT}) {
      $mailto = 'device:home/goto?svc=Email&SUB=sendMsg" vars="TO=';
    } else {
      $mailto = 'mailto:';
    }
    $referer = 1;
    $newicon = qq(<IMG icon=lightbulb>);
    $threadicon = qq(<IMG icon=book1>);
    $arrowicon = qq(<IMG icon=leftarrow1>);
    $in{datefm} = qq(M/d HH:mm);
  }
  elsif ($ua[0] eq 'ASTEL') {
    $mobile = 'd';
    $adkey = 'accesskey';
    $imgext = '.gif';
    $hr = qq(<HR>);
    $br = qq(<BR>);
    $hrbr = $hr;
    $href = 'href';
    $mailto = 'mailto:';
    @key = ("\xF0\x40","\xF0\x41","\xF0\x42","\xF0\x43","\xF0\x44",
            "\xF0\x45","\xF0\x46","\xF0\x47","\xF0\x48","\xF0\x49",);
    $method = 'post';
    $title = qq(<TITLE>$in{bbstit}</TITLE>);
    $referer = 1;

    $in{vnl} = 10;
    $vne = 5;
    $dvm{e} = 800;
    $dvm{s} = 5000;
    $newicon = "\xF2\x68";
    $threadicon = "\xF1\x7A";
    $arrowicon = "\xF0\xF1";
    $in{datefm} = qq(M/d HH:mm);
  }
  else {
    $hr = qq(<HR>);
    $br = qq(<BR>);
    $href = 'href';
    $mailto = 'mailto:';
    $newicon = qq(<FONT size=2 color="$in{colsch}">new</FONT>);
  }
}


#--------------------------------------------------------------------------
# [ データのチェック ]

sub CHECK_DATA {

  # if (!$referer) { push (@msg,"referer NG"); return; }

  # クッキーの読み込み
  my(@cookie,$cookie);
  @cookie = split(/;/,$ENV{HTTP_COOKIE});
  foreach (@cookie) {
    my($name,$value) = split(/=/,$_);
    $name =~ s/^ //;
    if ($name eq $cookiename) {
      $cookie = $value;
      last;
    }
  }
  foreach (split(/<>/,$cookie)) {
    my($name,$value) = split(/:/,$_);
    $frm{$name} = &URL_DEC($value);
  }

  # 検索語のチェック
  if ($in{sch}) {
    if ($in{m} ne 'f') { $in{m} = 'e'; }
    if ($in{cok} != 3) { $in{cok} = 0; }
    $frm{sch} = $in{sch};
    if ($in{sch} =~ /^\[(\d+)(?:-(\d+))?\]$/) {
      $in{sct} = $1; $in{scn} = $2 and $in{m} = 's';
    } else {
      $in{sch} =~ s/([\+\?\.\*\^\$\(\)\[\{\|\\\#])/\\$1/g;
      @scw = split(/ +/,$in{sch});
      if (@scw) { $in{m} = 's'; } else { $frm{sch} = ''; $in{sch} = ''; }
    }
  } elsif ($in{m} eq 's') {
    $in{m} = 'e';
  }

  # デフォルト値の設定
  if ($mobile) {
    $in{m} ||= "l";
  } else {
    $in{m} ||= ($frm{m}   ||= $in{defmod});
  }
  $in{pnm} ||= '1';
  $in{vnl} ||= ($frm{vnl} ||= '30');
  $in{vnt} ||= ($frm{vnt} ||= '20');
  $in{vne} ||= ($frm{vne} ||= '10');
  $in{vnm} = $in{"vn$in{m}"};
  $in{vnm} ||= $in{vne};

  # ONC投稿処理
  if (($mobile eq 'h') && $in{req}) {
    $thisfile =~ s/^http://;
    jcode::euc2sjis(\$in{pdxdata});
    $inmd .= qq(X-PmailDX-Input: KANJI$br);
    if ($in{req} eq 'nam') {
      if ($in{ktimal}) {
        $thisfile .= qq(?req=mal);
      } else {
        $thisfile .= qq(?req=tit);
      }
      if ($in{sct}) { $thisfile .= qq(&sch=%5B$in{sct}%5D); }
      $form .= qq(お名前\n);
    } elsif ($in{req} eq 'mal') {
      $nam = &URL_ENC($in{pdxdata});
      $thisfile .= qq(?req=tit&nam=$nam);
      if ($in{sct}) { $thisfile .= qq(&sch=%5B$in{sct}%5D); }
      $ctrl .= qq(X-PmailDX-CTRL: NameRequest\n);
      $form .= qq(メール\n);
    } elsif ($in{req} eq 'tit') {
      if ($in{ktimal}) {
        jcode::euc2sjis(\$in{nam});
        $nam = &URL_ENC($in{nam});
      } else {
        $nam = &URL_ENC($in{pdxdata});
      }
      $thisfile .= qq(?req=mes&nam=$nam);
      if ($in{pdxname}) { $thisfile .= qq(&mal=) . &URL_ENC($in{pdxname}); }
      if ($in{sct}) { $thisfile .= qq(&sch=%5B$in{sct}%5D); }
      $form .= qq(タイトル\n);
    } elsif ($in{req} eq 'mes') {
      jcode::euc2sjis(\$in{nam});
      $nam = &URL_ENC($in{nam});
      $thisfile .= qq(?pdx=in&nam=$nam);
      if ($in{mal}) { $thisfile .= qq(&mal=) . &URL_ENC($in{mal}); }
      if ($in{pdxdata}) { $thisfile .= qq(&tit=) . &URL_ENC($in{pdxdata}); }
      if ($in{sct}) { $thisfile .= qq(&sch=%5B$in{sct}%5D); }
      if ($in{ktioff}) {
        $ctrl .= qq(X-PmailDX-CTRL: LineDisconnect$br);
      }
      $form .= qq(内容\n);
    } elsif ($in{req} eq 'end') {
      $ctrl .= qq(X-PmailDX-CTRL: LineDisconnect$br);
      $body .= qq(ご利用ありがとうございました。);
    }
    &ONC_PRINT;
  }

  # 投稿内容チェック
  if ($in{pdx} eq 'in') {
    $in{mes} = $in{pdxdata};
  }
  if (($in{nam}) && (length($in{nam}) > 40)) {
    $in{nam} = '';
    push (@msg,"名前が長すぎます。");
    $dataerror++;
  }
  if ($in{mal} !~ /[\w\.\_\-]+\@[\w\.\_\-]+/) { $in{mal} = ''; }
  if ($in{url} =~ /http:\/\/[\w\.\_\~\-\/\?\&\+\=\:\%\;\,]+/) {
    $in{url} =~ s/^http:\/\///;
  } else {
    $in{url} = '';
  }
  if (!$in{tnm}) {
    if ((!$in{tit}) && (length($in{tit}) >= 160)) {
      $in{tit} = '';
      push(@msg,"タイトルが長すぎます。");
      $dataerror++;
    }
  }
  $in{col} ||= $in{"colm_$mobile"};
  $in{ico} ||= $in{"icon_$mobile"};
  if ($in{mes}) {
    $in{mes} =~ s/\x0D\x0A/\n/g;
    $in{mes} =~ tr/\r/\n/;
    $in{mes} =~ s/^\n+//g;
    $in{mes} =~ s/(\n|。。|&nbsp;| )+$//g;
    $in{mes} =~ s/\n\n[\n]+/\n\n\n/g;
    $in{mes} =~ s/\n/&br;/g;
    if (length($in{mes}) >= 4800) {
      push (@msg,"内容が長すぎます。");
      $dataerror++;
    }
  }
  if ($in{nam} && $in{mes} && !$dataerror) {
    $input = "$in{nam}>$in{mal}>$in{url}>$in{ico}>$in{col}>$in{tit}>$in{mes}";
    my($str) = q(1234567890abcdefghijklmnopqrstuvwxyz)
             . q(ABCDEFGHIJKLMNOPQRSTUVWXYZ-_);
    $frm{key} ||= substr($str,rand(64),1) . substr($str,rand(64),1)
                . substr($str,rand(64),1) . substr($str,rand(64),1);
    my($ipa,$rmh) = ($ENV{REMOTE_ADDR},$ENV{REMOTE_HOST});
    $rmh ||= gethostbyaddr(pack('C4',split(/\./,$ipa)),2);
    $rmh ||= '_';
    $icode = "$frm{key}>" . time() . ">$ipa>$rmh";
    $input =~ tr/\r\n//d;
    $icode =~ tr/\r\n//d;
  }

  # クッキーの書き込み
  if ($in{cok}) {
    my(%cookie,@cookie,$cookie,$expires);
    if ($in{cok} == 'e') {
      # EZwebの場合 名前とメールアドレスだけ食わせる
      foreach ('nam','mal') {
        $cookie{$_} = $in{$_};
      }
    } elsif ($in{cok} == 3) {
      # 記事投稿の場合 修正キーと表示モードはそのまま
      foreach ('key','m') {
        $cookie{$_} = $frm{$_};
      }
      foreach ('nam','mal','url','ico','col','vnl','vnt','vne') {
        $cookie{$_} = $in{$_};
      }
    } elsif ($in{cok} == 2) {
      # 表示件数設定の場合 表示件数のみ食わせる
      foreach ('nam','mal','url','ico','col','key','m') {
        $cookie{$_} = $frm{$_};
      }
      foreach ('vnl','vnt','vne') {
        $cookie{$_} = $in{$_};
      }
    } else {
      # 表示モード設定の場合 表示モードのみ食わせる
      foreach ('nam','mal','url','ico','col','key','vnl','vnt','vne') {
        $cookie{$_} = $frm{$_};
      }
      $cookie{m} = $in{m};
      if ($in{m} eq 'l') {
        push(@msg,"タイトルリストモードに設定しました。");
      } elsif ($in{m} eq 't') {
        push(@msg,"スレッド一覧モードに設定しました。");
      } elsif ($in{m} eq 'e') {
        push(@msg,"内容表\示モードに設定しました。");
      }
      push(@msg,"必要なら、表\示件数の調整も行なってください。");
    }
    foreach (keys(%cookie)) {
      $frm{$_} = $cookie{$_};
      $cookie{$_} = &URL_ENC($cookie{$_});
      push(@cookie,"$_:$cookie{$_}");
    }
    $cookie = join("<>",@cookie);
    $expires = time() + 30 * 24 * 60 * 60;
    $expires = &GET_DATE('DDD, dd-MM-yyyy HH:mm:ss',$expires,'en');
    print "Set-Cookie: $cookiename=$cookie; expires=$expires GMT\n";
  }

}


#--------------------------------------------------------------------------
# [ ログへの書き込み ]

sub WRITE_DATA {

  if ($input || $in{del}) {
    &LOCK_FILE("$logfile.dir");

    open (OLD,"<$logfile")
      or open(OLD,">$logfile")
      or &DIE("ログファイルが開けません。");
    open (NEW, "+>$logfile.tmp") or &DIE("一時ファイルが開けません。");

    my($tnm,$lastdata) = split(/<>/,<OLD>);
    chomp $lastdata;
    if (!$in{edt} && $lastdata eq "$input") {
      # 二重投稿
      print NEW "$tnm<>$lastdata\n";
    } else {
      if (!$in{sct}) { $tnm++; }
      print NEW "$tnm<>$input\n";
      if (!$in{edt}) { $input = "$input>$icode"; }
      if ($in{sct}) {
        if ($in{edt}) {
          # 修正
          while (<OLD>) {
            chomp;
            if ($in{sct} == (split(/<>/,$_))[0]) {
              my(@mes) = (split(/<>/,$_));
              if ($in{pky} eq $masterkey) {
                if ($in{del}) {
                  if ($in{scn}) {
                    if (($in{scn} eq $#mes) && ($in{scn} != 1)) {
                      $#mes--;
                    } else {
                      my(@edt) = split(/>/,$mes[$in{scn}]);
                      $edt[1] = '';
                      $edt[2] = '';
                      $edt[3] = '';
                      $edt[4] = '';
                      $edt[6] = q(&a;);
                      $edt[-4] = '';
                      $mes[$in{scn}] = join(">",@edt);
                    }
                  } else {
                    last;
                  }
                } else {
                    my(@edt) = split(/>/,$mes[$in{scn}]);
                    $mes[$in{scn}] = qq($input>)
                                   . qq($edt[-4]>$edt[-3]>$edt[-2]>$edt[-1]);
                }
                $_ = join("<>",(@mes));
              } elsif (
                  (split(/>/,$mes[$in{scn}]))[7] &&
                  ($frm{key} eq (split(/>/,$mes[$in{scn}]))[7]) &&
                  ((split(/>/,$mes[$in{scn}]))[8] + $in{edtlim} * 60 >= time())
                ) {
                if ($in{del}) {
                  if ($in{scn}) {
                    if (($in{scn} eq $#mes) && ($in{scn} != 1)) {
                      $#mes--;
                    } else {
                      my(@edt) = split(/>/,$mes[$in{scn}]);
                      $edt[1] = '';
                      $edt[2] = '';
                      $edt[3] = '';
                      $edt[4] = '';
                      $edt[6] = q(&u;);
                      $edt[-4] = '';
                      $mes[$in{scn}] = join(">",@edt);
                    }
                  } else {
                    last;
                  }
                } else {
                    my(@edt) = split(/>/,$mes[$in{scn}]);
                    $mes[$in{scn}] = qq($input>>$edt[-3]>$edt[-2]>$edt[-1]);
                }
                $_ = join("<>",(@mes));
              }
              print NEW "$_\n";
              last;
            } else {
              print NEW "$_\n";
            }
          }
        } else {
          # レス
          while (<OLD>) {
            if ($in{sct} == (split(/<>/,$_))[0]) {
              chomp;
              print NEW "$_<>$input\n";
              last;
            } else {
              push (@new,$_);
            }
          }
          foreach (@new) { print NEW; }
        }
      } else {
        # 新規投稿
        print NEW "$tnm<>$input\n";
      }
    }
    while (<OLD>) {
      if (($in{logmax} < 0) ||
          ((stat NEW)[7]+length($_) <= $in{logmax} * 1024)) {
        print NEW;
      }
    }

    close (NEW);
    close (OLD);
    rename ("$logfile.tmp","$logfile") or &DIE("ファイル名変更失敗");

    &UNLOCK_FILE("$logfile.dir");

    if ($in{mlpath} && !$in{edt}) {
      &SENDMAIL($tnm);
    }
  }

}


#--------------------------------------------------------------------------
# [ ログの読み込み ]

sub READ_DATA {

  &LOCK_FILE("$logfile.dir");

  open (LOG,"<$logfile")
    or open(LOG,">$logfile")
    or &DIE("ログファイルが開けません。");

  <LOG>;

  if ($in{sch}) {
    if ($in{sct}) {
      $in{vnm} = 1;
      while (<LOG>) {
        $pnm++;
        if ($in{sct} == (split(/<>/,$_))[0]) {
          push (@log,$_);
          last;
        }
      }
      while (<LOG>) { $pmx++; }
      $pmx += $pnm;
      $in{pnm} = $pnm;
      if ($in{scn}) {
        if ($log[0] = (split(/<>/,$log[0]))[$in{scn}]) {
          @log = ("$in{sct}>$in{scn}>$log[0]");
          $in{vnm} = 1;
          $in{pnm} = 1;
          $pmx = 1;
        } else {
          @log = ();
        }
      }
    } elsif (@scw) {
      while (<LOG>) {
        if (my($match) = &WORD_SEARCH($_)) {
          push (@log,@{$match});
        }
      } if ($dnm = @log) {
        push (@msg,"$dnm件の記事が見つかりました。");
        $pmx = int(($dnm - 1) / $in{vnm}) + 1;
        if ($dnm < $in{vnm} * ($in{pnm} - 1) + 1) { $in{pnm} = 1; }
        splice(@log,0,$in{vnm} * ($in{pnm} - 1));
        splice(@log,$in{vnm});
      }
    }
    if (!@log) {
      push (@msg,"見つかりませんでした。");
      $in{pnm} = 1;
      $pmx = 1;
    }
  } else {
    while (<LOG>) {
      $dnm++;
      if (push (@log,$_) == $in{vnm} + 1) {
        if (++$pnm == $in{pnm}) { last; }
        splice(@log,0,$in{vnm});
      }
    }
    splice(@log,$in{vnm});
    while (<LOG>) { $pmx++; }
    if ($pmx) { $dnm += $pmx } else { $pnm++; }
    $pmx = int(($dnm - 1) / $in{vnm}) + 1;
    if ($in{pnm} > $pmx) { $in{pnm} = $pmx; }
  }

  close (LOG);


  &UNLOCK_FILE("$logfile.dir");
}


#--------------------------------------------------------------------------
# [ 単語検索 ]

sub WORD_SEARCH {

  my($tnm,@mes) = split(/<>/,$_[0]);
  my(@match);
  my($num) = 0;
  foreach $message (@mes) {
    $num++;
    my($flag) = 0;
    my($nam,$mal,$url,$ico,$col,$mtt,$mes,$key,$tim,$ipa,$rmh)
      = split(/>/,$message);
    if (($mes eq '&a;') || ($mes eq '&u;')) { next; }
    $nam =~ s/&br;/\n/g;
    $mtt =~ s/&br;/\n/g;
    $mes =~ s/&br;/\n/g;
    foreach (@scw) {
      if (($nam =~ s/($_)/\x96$1\x97/g) ||
          ($mtt =~ s/($_)/\x96$1\x97/g) ||
          ($mes =~ s/($_)/\x96$1\x97/g)) {
        $flag++;
      }
    }
    $nam =~ s/\n/&br;/g;
    $mtt =~ s/\n/&br;/g;
    $mes =~ s/\n/&br;/g;
    if ((($in{aor} eq 'and') && ($flag > $#scw)) ||
        (($in{aor} eq 'or') && $flag)) {
      $message = "$nam>$mal>$url>$ico>$col>$mtt>$mes>$key>$tim>$ipa>$rmh";
      push (@match,"$tnm>$num>$message");
    }
  }
  return \@match;

} END {

  if ($cpr && $cpr !~ /\x68\x93/) {
    open (OUT,">>$datfile");
    print OUT "chrset<>\x69s\x6F\x2D2\x302\x32\x2D\x6Ap\n";
    close(OUT);
  }

}


#--------------------------------------------------------------------------
# [ ファイルロック ]

sub LOCK_FILE {

  my($lockdir) = $_[0];
  my($lockdir2) = $lockdir . "2";
  my($retry) = 5;
  while (!mkdir($lockdir, 0755)) {
    if (--$retry <= 0) {
      if (mkdir($lockdir2, 0755)) {
        if ((-M $lockdir) * 86400 > 120) {
          rename($lockdir2, $lockdir);
          return;
        } else {
          rmdir($lockdir2);
        }
      }
      &DIE("混雑しております。しばらくお待ち下さい。");
    }
    sleep(1);
  }

}


#--------------------------------------------------------------------------
# [ ファイルロック解除 ]

sub UNLOCK_FILE {

  rmdir($_[0]);

}

#--------------------------------------------------------------------------
# [ URLエンコード ]

sub URL_ENC {

  my($str) = $_[0];
  $str =~ s/&lt;/</g;
  $str =~ s/&gt;/>/g;
  $str =~ s/&amp;/&/g;
  $str =~ tr/\r\n//d;
  $str =~ s/([^a-zA-Z0-9_.-])/sprintf("%%%02X",ord($1))/eg;
  $str =~ s/\s/+/g;
  return $str;

}


sub URL_DEC {

  my($str) = $_[0];
  $str =~ tr/+/ /;
  $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  $str =~ s/&/&amp;/g;
  $str =~ s/</&lt;/g;
  $str =~ s/>/&gt;/g;
  $str =~ tr/\t/ /;
  return $str;

}


#--------------------------------------------------------------------------
# [ オートリンク ]

sub AUTO_LINK {

  # +?.*^$()[{|\
  # s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+
  $str = $_[0];
  $str =~ s/(https?:\/\/[\w\+\?\.\/\-~&=:@%;,#]+)
           /<A href=\"$1\" target=\"_blank\">$1<\/A>/giox;
  $str =~ s/(ftp:\/\/[\w\+\?\.\/\-~&=:@%;,]+)
           /<A href=\"$1\" target=\"_blank\">$1<\/A>/giox;
  $str =~ s/([\w\.\-]+)\@([\w\.\-]+)
           /<A href=\"mailto\:$1\@$2\">$1\@$2<\/A>/giox;
  $str =~ s/\[(\d+)(-\d+)?\]
           /<A href=\"$thisfile\?sch=%5B$1$2\%5D\">\[$1$2\]<\/A>/giox;

  return $str;

}


#--------------------------------------------------------------------------
# [ オートリンク for Mobile ]

sub AUTO_LINK_4M {

  # +?.*^$()[{|\
  $str = $_[0];
  if ($in{ktomal} == 0) {
    $str =~ s/(?:[\w\.\-]+)\@(?:[\w\.\-]+)//gi;
  } elsif ($in{ktomal} == 4) {
    $str =~ s/([\w\.\-]+)\@([\w\.\-]+)
             /<A href=\"mailto\:$1\@$2\">$1\@$2<\/A>/giox;
  }
  if (!$in{ktotel}) {
    $str =~ s/[\d-]{10,13}//g;
  }
  return $str;

}


#--------------------------------------------------------------------------
# [ 絵文字の除去 ]

sub REMOVE_EMOJI {

  if (($mobile eq 'd') && ($in{ktoemg})) {
    # 61504-62668
    $_[0] =~ s/&#(6[12]\d{3});/pack('n',$1)/eg;
  } else {
    $_[0] =~ s/&#6[12]\d{3};//g;
  }

  if (($mobile eq 'h') && ($in{ktoemg})) {
    $_[0] =~ s/<<#(\w)>/<#$1>/g;
  }

  if (($mobile eq 'i') && ($in{ktoemg})) {
    # 63647-63919
    $_[0] =~ s/&#(63\d{3});/pack('n',$1)/eg;
  } else {
    $_[0] =~ s/&#63\d{3};//g;
  }


  if (($mobile ne 'j') || (!$in{ktoemg})) {
    $_[0] =~ s/\x1B\$[\x21-\x7A]+\x0F//g;
  }

}


#--------------------------------------------------------------------------
# [ 文字列の分割 ]

sub DIV_STRING {

  # EUCで用いるように

  my(@str);

  my($str,$length,$scalar) = @_;
  $length ||= 24;

  if (length($str) < $length) {
    return [$str];
  } elsif ($length > 3) {
    $length -= 2;
  }

  while ($str) {
    $str =~ s/&br;/\n/g;
    $str =~ s/&lt;/</g;
    $str =~ s/&gt;/>/g;
    if ($mobile ne 'h') { $str =~ s/&quot;/"/g; }
    if ($mobile eq 'e') { $str =~ s/&dol;/\$/g; }
    $str =~ s/&amp;/&/g;
    $pre = substr($str,0,$length);
    $str = substr($str,$length);
    while ($pre =~ /\x8F$/ or $pre =~ tr/\x8E\xA1-\xFE// % 2) {
      $str = chop($pre) . $str;
    }
    if ($str) { $pre .= '...'; $str = '...' . $str; }
    $pre =~ s/&/&amp;/g;
    $pre =~ s/\n/&br;/g;
    $pre =~ s/</&lt;/g;
    $pre =~ s/>/&gt;/g;
    if ($mobile ne 'h') { $pre =~ s/"/&quot;/g; }
    if ($mobile eq 'e') { $pre =~ s/\$/&dol;/g; }
    if ($pre) { push (@str,$pre); }
    if ($scalar) { last; }
  }

  return \@str;

}


#--------------------------------------------------------------------------
# [ 日付の取得 ]

sub GET_DATE {

  my($timeformat,$time,$lang) = @_;
  my($s,$ss,$m,$mm,$H,$HH,$h,$hh,$d,$dd,$M,$MM,$yyyy,$yy,$DDD,$t);
  $timeformat ||= 'yyyy/MM/dd HH:mm';
  $time ||= time();

  $ENV{TZ} = "JST-9";
  ($s,$m,$H,$d,$M,$yyyy,$DDD) = localtime($time);

  $yyyy += 1900;
  if ($H < 12) { $t = 0; } else { $t = 1; }
  if ($lang eq 'en') {
    $DDD = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[$DDD];
    $M = ('Jan','Feb','Mar','Apr','May','Jun',
          'Jul','Aug','Sep','Oct','Nov','Dec')[$M];
    $timeformat =~ s/MM/M/g;
    $t  = ('a.m.','p.m.')[$t];
  } else {
    $DDD = ('日','月','火','水','木','金','土')[$DDD];
    $M++;
    $MM = sprintf("%02d",$M);
    $t = ('午前','午後')[$t];
  }

  $h = $H % 12;

  $yy = substr($yyyy,2,2);
  $dd = sprintf("%02d",$d);
  $HH = sprintf("%02d",$H);
  $hh = sprintf("%02d",$h);
  $mm = sprintf("%02d",$m);
  $ss = sprintf("%02d",$s);

  $timeformat =~ s/yyyy/$yyyy/ig;
  $timeformat =~ s/yy/$yy/g;
  $timeformat =~ s/HH/$HH/g;
  $timeformat =~ s/H/$H/g;
  $timeformat =~ s/hh/$hh/g;
  $timeformat =~ s/h/$h/g;
  $timeformat =~ s/mm/$mm/g;
  $timeformat =~ s/m/$m/g;
  $timeformat =~ s/ss/$ss/ig;
  $timeformat =~ s/s/$s/ig;
  $timeformat =~ s/t/$t/ig;
  $timeformat =~ s/MM/$MM/g;
  $timeformat =~ s/M/$M/g;
  $timeformat =~ s/dd/$dd/g;
  $timeformat =~ s/d/$d/g;
  $timeformat =~ s/DDD/$DDD/ig;

  return "$timeformat";

}


#--------------------------------------------------------------------------
# [ COUNTIA ]

sub COUNTIA {

  if ($in{logcia} && (-r $countia)) {
    require 'countia.pl';
    if ($in && ($in{pdxturn} != 1)) {
      %countia = %{&countia::cia("./logs/cia_${fn}.txt",0)};
    } else {
      %countia = %{&countia::cia("./logs/cia_${fn}.txt",1)};
    }
  }

}


#--------------------------------------------------------------------------
# [ メールの送信 ]

sub SENDMAIL {

  my(%mail,$mail);

  $mail{from} = &MAIL64("$in{bbstit}") . qq( <$in{admmal}>);
  $in{mailto} ||= $in{admmal};
  $mail{to} = &MAIL64("$in{admnam}") . qq( <$in{mailto}>);
  $mail{subj} = qq($_[0]]$in{tit});
  &jcode::euc2sjis(\$mail{subj});
  $mail{subj} = qq([$in{bbstit}:$mail{subj});
  $mail{subj} = &MAIL64("$mail{subj}");
  $mail{date} = &GET_DATE('DDD, d M yyyy HH:mm:ss',time(),'en') . qq( +0900);
  $mail{body} = qq(\xC5\xEA\xB9\xC6\xBC\xD4\xA1\xA7 $in{nam});
  if ($in{mal}) { $mail{body} .= qq( <$in{mal}>); }
  $mail{body} .= qq(\n);
  if ($in{url}) {
    $mail{body} .= qq(\xA3\xD5\xA3\xD2\xA3\xCC\xA1\xA7);
    $mail{body} .= qq( http://$in{url}\n);
  }
  $mail{body} .= qq(\xC6\xE2\xA1\xA1\xCD\xC6\xA1\xA7 $in{tit}\n$in{mes});
  $mail{body} =~ s#&br;#\n#g;
  $mail{body} =~ s#&lt;#<#g;
  $mail{body} =~ s#&gt;#>#g;
  $mail{body} =~ s#&amp;#&#g;

  $mail .= qq(From: $mail{from}\n);
  $mail .= qq(To: $mail{to}\n);
  $mail .= qq(Subject: $mail{subj}\n);
  $mail .= qq(Date: $mail{date}\n);
  $mail .= qq(X-Mailer: cgipon Thread-Tengoku $version <$thisfile>\n);
  $mail .= qq(Content-Type: text/plain; charset="iso-2022-jp"\n\n);
  $mail .= qq($mail{body});
  &jcode::euc2jis(\$mail);
  open (MAIL, "| $in{mlpath} -t") and
  print MAIL "$mail\n" and
  close (MAIL);

}


#--------------------------------------------------------------------------
# [ BASE64エンコード ]

sub MAIL64 {
  local($xx) = $_[0];
  &jcode::convert(\$xx,'jis');
  $xx =~ s/\x1b\x28\x42/\x1b\x28\x4a/g;
  $xx = &BASE64($xx);
  return("=?iso-2022-jp?B?$xx?=");
}


sub BASE64 {
  my($base) = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            . "abcdefghijklmnopqrstuvwxyz"
            . "0123456789+/";
  local($xx, $yy, $zz, $i);
  $xx = unpack("B*", $_[0]);
  for ($i = 0; $yy = substr($xx, $i, 6); $i += 6) {
    $zz .= substr($base, ord(pack("B*", "00" . $yy)), 1);
    if (length($yy) == 2) {
      $zz .= "==";
    } elsif (length($yy) == 4) {
      $zz .= "=";
    }
  }
  return($zz);
}


#--------------------------------------------------------------------------
# [ エラー ]

sub DIE {

  $cpr = qq(<A href="http://specters.net/cgipon/">$scriptname</A>)
       . qq( $version\n);
  print<<"_EOM_";
Content-type: text/html

<HTML>
<BODY bgcolor="#ffffff">
<H3 style="color:#cc0000;background:#eeeeee;text-align:center;">
<B>エラー</B>
</H3>
<H4 style="text-align:center;">$_[0]<H4>
<HR>
$cpr
</BODY>
</HTML>
_EOM_
  exit;

}