#!/usr/bin/perl #--------------------------------------# # Pallet Town (2006/05/10) # # # $version = 'v3.00'; # # # # Created by ぱおろん # # http://paoron.jp/ # #--------------------------------------# ########## ■初期設定■ ########## # ●管理者用パスワード 必ず変更して下さい(半角英数字で8文字以内) $pass = 'a440'; # その他の設定はplug.cgiで行います $update = 'Ver.3.9/Feb.11\'09'; $top_image = "./imgdir/58.png"; #>>>>>>>>>>>>>>>>>>> ここから下はPerl・htmlの知識が必要 <<<<<<<<<<<<<<<<<<<<# require 'plug.cgi'; $cgiflag=$limit=$imode=0; %FORM=(); # # SPAM防止Cookie期限 # $c_time = time; $c_expire = 120; @c_date = localtime(time + $c_expire * 86400); $c_date[5] += 1900; $c_date[3] = sprintf("%02d",$c_date[3]); $c_date[2] = sprintf("%02d",$c_date[2]); $c_date[1] = sprintf("%02d",$c_date[1]); $c_date[0] = sprintf("%02d",$c_date[0]); $c_wday = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$c_date[6]]; $c_month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$c_date[4]]; $c_date_gmt = "$c_wday, $c_date[3]\-$c_month\-$c_date[5] $c_date[2]:$c_date[1]:$c_date[0] GMT"; # # デコード処理 # &decode; sub decode { my ($buffer,$pair,$name,$value,@pairs); if ($ENV{'CONTENT_TYPE'} !~ m|^multipart/form-data|i) { if ($ENV{'REQUEST_METHOD'} eq 'POST') { $ENV{'CONTENT_LENGTH'} > 30720 && &error ('サイズオーバー'); read (STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); $limit = 1; } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split (/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split (/=/,$pair); if ($name eq 'targets') { push (@list,"$value"); next; } $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack('H2',$1)/eg; "e (\$value); $value =~ s/\x0D?\x0A?$//; $FORM{$name} = $value; } } else { $ENV{'REQUEST_METHOD'} ne 'POST' && &error ('この掲示板はPOST限定となっております'); $ENV{'CONTENT_LENGTH'} > 1024000 && &error ('サイズオーバー'); binmode (STDIN); read (STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); $limit = 1; $buffer =~ /^([^\r\n]+)(\r?\n?)/; my $boundary = quotemeta ($1); my $rn = $2; @pairs = split (/$boundary-*$rn/,$buffer); shift @pairs; foreach $pair (@pairs) { ($name) = $pair =~ /^Content-Disposition: [^;]*; name="(\w+)"/i; if ($name eq 'image') { ($fname,$ctype,$value) = split (/$rn/,$pair,3); ($fname) = $fname =~ /filename="([^$rn]*)"$/i; ($ctype) = $ctype =~ /Content-Type: ([^$rn]*)$/i; } else { ($dump,$value) = split (/$rn/,$pair,2); "e (\$value); } $value =~ s/^$rn//; $value =~ s/$rn$//; $FORM{$name} = $value; } } } # # 表示調整 # sub quote { local *quots = shift; $quots =~ s/"/"/g; $quots =~ s//>/g; } # # ユーザー設定ファイルのチェック # if ($FORM{'mode'} eq 'admin' && $FORM{'pwd'} eq $pass) { require $master_script; &custom; } unless (-e "$userfile") { require $master_script; &first; } elsif (-s "$userfile" < 1500) { require $master_script; &ini; $banner3 = '管理人へ、ユーザー設定ファイルが壊れている可能性があります。再設定をして下さい。'; } else { require $userfile; } &unaccs; # # モード振り分け # if ($FORM{'mode'} eq 'contribute') { &contribute; } elsif ($FORM{'mode'} eq 'picture') { &picture; } elsif ($FORM{'mode'} eq 'draw') { &draw; } elsif ($FORM{'mode'} eq 'refresh') { &refresh; } elsif ($FORM{'mode'} eq 'viewer') { &pchviewer; } elsif ($FORM{'mode'} eq 'preview') { &preview; } elsif ($FORM{'mode'} eq 'regist') { require $resist_script; ®ist; } elsif ($FORM{'mode'} eq 'change') { &change; } elsif ($FORM{'mode'} eq 'search') { require $lib_script; &search; } elsif ($FORM{'mode'} eq 'myname') { require $lib_script; &myname; } elsif ($FORM{'mode'} eq 'publish') { require $lib_script; &publish; } elsif ($FORM{'mode'} eq 'myname_resist') { require $resist_script; &myname_resist; } elsif ($FORM{'mode'} eq 'past_view') { &past_view; } elsif ($FORM{'mode'} eq 'all_admin' && $FORM{'pwd'} eq $pass) { require $master_script; &all_admin; } elsif ($FORM{'mode'} eq 'maintenance' && $FORM{'pwd'} eq $pass) { require $master_script; &maintenance; } elsif ($FORM{'mode'} eq 'howto') { require $lib_script; &howto; } elsif ($FORM{'mode'} eq 'revision_edit' && $FORM{'userpwd'} eq $pass) { require $resist_script; &revision_edit; } elsif ($ENV{'HTTP_USER_AGENT'} =~ /^(?:DoCoMo|J-PHONE|KDDI|UP)/) { require $lib_script; &docomo_view; } elsif ($ENV{'HTTP_USER_AGENT'} =~ /(?:SoftBank|Vodafone|MOT-)/i) { require $lib_script; &docomo_view; } elsif ($ENV{'HTTP_USER_AGENT'} =~ /emulator/i) { require $lib_script; &docomo_view; } #test elsif ($FORM{'i_page'} || $FORM{'i'}) { require $lib_script; &docomo_view; } else { &view; } exit; # # メニューコントロール # sub menu { my $kind = shift; if ($kind) { my @contrl = qw|'' スレッド一覧 使い方 キーワード検索 過去ログ 投稿記事修正|; print <<"HTML";

$contrl[$kind]
  HTML } printf "[]\n", $kind ?qq|"$htmldir$htmlfile">掲示板|:qq|"$homepage" target=$target>HOME|; if ($res_top && !$kind) { if (exists $FORM{'sort'}) { print qq|[最新順]\n|; } else { print qq|[番号順]\n|; } } if (!$pctart) { print qq|[$subg]\n|; } print qq|[使い方]\n|; if ($cotei) { print qq|[コテハン登録一覧]\n|; } print qq|[キーワード検索]\n|; if ($pastuse) { print qq|[過去ログ]\n|; } if ($kind) { print "

\n"; } } # # サブテーブル # sub tables { my ($t1,$t2,$t3) = @_; print <<"HTML";

$t1
 [掲示板に戻る]  $t2
 $t3

HTML } # # 画像アップロード・お絵描き本文画面 # sub contribute { if (exists $FORM{'amp;id'}) { $FORM{'id'} = $FORM{'amp;id'}; } my $ctb_mode = exists $FORM{'id'}; $pctart == 2 && !$ctb_mode and &error ('不正な入力をブロックしました'); my ($gamen,$kaiga,$hisu,$pno,$pip,$pid,$pex,$pwi,$phi,$repair,$mpt); local ($hid,$arts,$admin,$sname,$ppwd,$ssub,$smail,$surl,$scom,$ssend,$sok); if ($ctb_mode && ($pctart or $hanga && !$pctart)) { $FORM{'id'} =~ /\D/ && &error ('不正な入力です'); my $idfile = "$sytm"."$FORM{'id'}".'.tmp'; my $retry = 5; until (open (PCT,"$idfile")) { if (--$retry <= 0) { &error ("専用IDファイルが開きませんでした。
投稿自体は成功しているかもしれません。
ここから確認してみて下さい"); } sleep 1; } ($pno,$pip,$sname,$ppwd,$pid,$pex,$pwi,$phi,$repair) = split (/<>/,); close (PCT); unlink ("$idfile"); # substr($ENV{'REMOTE_ADDR'},0,6) ne substr($pip,0,6) && &error ("お絵描きアプレットからのIPアドレスと一致しませんでした。
投稿自体は成功しているものと思われます。
セキュリティチェックにより「修正モード」からコメントを書いて下さい。
記事Noは$pnoです。ここからどうぞ"); $hid = qq|\n\n|; if ($repair) { $ssub = "> $repair "; } $gamen = 'お絵描き→コメント入力'; $kaiga = "『$sname』コメント中"; } else { $gamen = '新規投稿'; $kaiga = qq|[使い方]|; $hisu = sprintf ("%s拡張子 gif、jpg(jpeg)、pngのみ。FileSize %dKB。縦 ${h_max}pixel×横 ${w_max}pixelまで。", !$cmtonly ?'画像は必須となっております。':'',int($img_max / 1024)); } &type; &java_nosubmit; &java_cookie_sp; &bgc_ch ($ctb_mode,1); &header; &tables ($gamen,$kaiga,$hisu); if ($ctb_mode) { $arts = 1; print qq|

\n|; } else { $mpt = ' enctype="multipart/form-data"'; if ($banner4) { $banner4 =~ s/\0/\n/g; print "$banner4\n"; } } &form ($mpt); print "

\n"; &java_cookset (!$ctb_mode,1); if ($pchup && !$ctb_mode && $pctart) { print <<"HTML";

アニメ専用アップロード
 お絵描きアプレット専用ファイル( HTML print 'PaintBBS(.pch) ' if $shipaint != 1; print 'しぃペインター(.spch) ' if $shipaint != 0; print ')を直接キャンバスに取り込みます。
 FileSize ',int ($sii_ani_max / 1024),"KBまで。\n"; if ($pchsize) { print '縦 pixel、横 pixelは表の「Canvas Size」の値に合致している必要があります。'; } else { print "縦 ${h_max}pixel、横 ${w_max}pixelまでです。"; } print <<"HTML";

HTML if ($shipaint != 1) { printf '', $shipaint == 2 ?'PaintBBSなら入力必須':'手動入力する必要あり'; print qq|\n|; } if ($shipaint && $shi_stdpro == 0) { printf qq|\n\n"; } print ''; &napa ('キャンバスに取込'); print "
%s⇒×横
%s
\n

\n"; print qq| JAVA } print "
\n"; &footer; exit; } # # お絵描き画面 # sub picture { $limit || &error ('制限されている投稿方法です'); $pctart || ($hanga && !$pctart) or &error ('不正な入力をブロックしました'); &refe; require $jcode; &jcode::convert (\$FORM{'name'},'euc'); my $na = $FORM{'name'}; my $pw = $FORM{'pwd'}; my $addr = $ENV{'REMOTE_ADDR'}; $na eq '' && &error ('Nameが入力されていません'); if ($max_name) { (length $na > $max_name * 2) && &error ("Nameの文字数が多すぎます。
$max_name字以内で入力して下さい"); } $pw eq '' && &error ('Passが入力されていません'); my $replace = $FORM{'paintno'}; "$replace$FORM{'drawing'}" =~ /\D/ && &error ('不正な入力です'); if ($cotei && !$replace) { &name_check ($na,$pw,1); } my ($kirikae,$apch,$apllet,$res,$dir_val,$shi,$code,$place,$zoon,$start,$hisu); if ($pchup && $FORM{'upload'}) { require $resist_script; ($replace,$kirikae) = &pch_spch ($addr); } my $tateyoco = exists $FORM{'tateyoco'} ?$FORM{'tateyoco'}:"$FORM{'tate'},$FORM{'yoco'}"; my ($tate,$yoco) = split (/,/,$tateyoco); if ($sizemode == 0 && !exists $FORM{'drawing'} && !$replace) { $tate =~ s/\D//g; $yoco =~ s/\D//g; if ($yoco eq '' || $tate eq '') { $tate = $cs0_nh; $yoco = $cs0_nw; } elsif ($cs0_s > $yoco || $yoco > $cs0_m || $cs0_s > $tate || $tate > $cs0_m) { &error ("入力サイズは最小$cs0_sから最大$cs0_mの間にして下さい"); } } my $aws = $yoco + 100; my $ahs = $tate + 120; if ($FORM{'shii'}) { if ($aws < 700) { $aws = 700; } if ($ahs < 550) { $ahs = 550; } $apch = $FORM{'shii'} eq 'pro' ?'pro':'normal'; if ($htmlcgi) { $apllet = "$ct_sct?painter,$ct_sct?$apch.zip"; $res = $dir_val = "$ct_sct?"; } else { $apllet = "spainter.jar,res/$apch.zip"; $res = $dir_val = 'res/'; } $code = 'c.ShiPainter'; $shi = '&syi='."$apch"; } else { if ($aws < 380) { $aws = 380; } if ($ahs < 420) { $ahs = 420; } $apllet = $htmlcgi ?"$ct_sct?paint":'PaintBBS.jar'; $code = 'pbbs.PaintBBS'; } foreach ($na,$pw,$addr) { s/(\W)/'%'.unpack('H2',$1)/eg; } if ($kirikae) { $place = 'mode=upload'; $hisu = 'アニメアップロードから絵画します。「投稿」ボタンを押すとコメント入力画面が現れます。'; } elsif ($replace && $repaint) { $place = 'mode=replace'; $hisu = '■ リタッチ ■'; } else { if ($hanga && $FORM{'drawing'}) { $replace = $FORM{'drawing'}; $place = 'mode=drawing'; } $hisu = '絵画後「投稿」ボタンを押すとコメント入力画面が現れます。'; } $place .= $replace ?('&no='."$replace".'&'):''; if ($aptime) { &timezone; if (!$FORM{'notime'}) { $zoon = '&zoon='.($time - $FORM{'jikan'}); } my ($sec,$min,$hour,$mday,$mon,$dummy,$wday) = localtime ($time); my @week = qw|Sun Mon Tue Wed Thu Fri Sat|; $start = sprintf ("%02d/%02d(%s) %02d:%02d:%02d", $mon+1,$mday,$week[$wday],$hour,$min,$sec); } my $send_header = "${place}name=$na&pwd=$pw&addr=$addr$zoon$shi"; my $mation = ($FORM{'manga'} && $animation) ?1:0; my $co2 = $applet[2] || '#666699'; my $co3 = $applet[5] || '#CCCCFF'; my $co4 = $applet[6] || '#666699'; my $solid = @colordata; my $mac = defined @colordata && $ENV{'HTTP_USER_AGENT'} !~ /Mac/i ?1:0; &type; if ($mac) { my ($a,$b,$c); foreach (0..13) { if ($#colormenu >= $_) { $a .= "$colormenu[$_][0]"; $b .= "$colormenu[$_][1]"; $c .= "$colormenu[$_][2]"; } else { $a .= '#000000'; $b .= '#000000'; $c .= '#000000'; } if ($_ != 13) { $a .= '\n'; $b .= '\n'; $c .= '\n'; } } print "clr = new Array();\n"; foreach (0..$#colordata) { my @cc = ($colordata[$_][1] =~ /([0-9a-zA-Z]{6})/g); print "clr[$_] = '#", join ('\\n#',@cc) ,"';\n"; } print <<"JAVA"; tmp = new Array(); tmp[0] = '$a'; tmp[1] = '$b'; tmp[2] = '$c'; function custom(ary) { if (d.p.sel.selectedIndex != $solid) d.p.sel.selectedIndex = $solid; clr[$solid] = ary.join("\\n"); d.paintbbs.setColors(clr[$solid]); } JAVA print <<'JAVA'; cargo = new Array(); day = new Array(); flag = 0; color = ""; c = "0123456789ABCDEF"; function Set(akico,s) { if (akico == 1) { color = clr[s.selectedIndex]; d.p.contna.selectedIndex = -1; } else if (akico == 2) { color = cargo[s.selectedIndex]; d.p.sel.selectedIndex = -1; } else { color = tmp[s.options[s.selectedIndex].value]; } if (d.p.auto.checked) { d.paintbbs.setColors(color); } else { auto(color); } if (akico) d.p.codi.selectedIndex = ""; } function auto(c) { if (!c) return; var hold = new Array(); hold = c.split("\n"); JAVA print qq| var fonts = '
';\n|; print <<'JAVA'; for (i = 0; i < hold.length; i++) { fonts += '' + '■'; if (i % 2) fonts += '
'; } fonts += '
'; if (d.all) d.all("ap").innerHTML = fonts; } function NonPost() { if (!d.all) return 0; if (d.p.auto.checked) { d.all("ap").style.visibility = "hidden"; d.paintbbs.setColors(color); } else { auto(color); d.all("ap").style.visibility = "visible"; } } function Temp(c) { var date = new Date(); day[flag] = zero(date.getDate())+","+zero(date.getHours())+":"+zero(date.getMinutes())+":"+zero(date.getSeconds()); cargo[flag] = String(d.paintbbs.getColors()); if (flag >= 5) { for (i = 0; i < 5; i++) { cargo[i] = cargo[i+1]; day[i] = day[i+1]; } flag = 5; } else { flag++; } for (n = 0; n < Math.min(cargo.length,5); n++) { c.options[n] = new Option(day[n],cargo[n]); } d.p.sel.selectedIndex = -1; } function zero(t) { if (t < 10) t = "0" + t; return t; } function Chang(c) { var marina = c.selectedIndex; if (marina == -1 || c.options[c.selectedIndex].value == "") return; c.options[marina] = null; var len = cargo.length; len -= len > 5 ?2:1; cargo = new Array(); day = new Array(); for (n = 0; n < len; n++) { cargo[n] = c.options[n].value; day[n] = c.options[n].text; } flag -= 1; } function cook() { var len = cargo.length; len -= len > 5 ?1:0; if (!len) return; var cname = ""; var dname = ""; for (n = 0; n < len; n++) { var junco = cargo[n].split("\n").join("").toString(); cname += junco.replace(/#/g,""); dname += day[n]; if (n != len-1) { cname += "_"; dname += "_"; } } dname = escape(dname); var set_expires = new Date(); set_expires.setTime(set_expires.getTime() + 60 * 86400000); var cook = "PTCOLOR=txt:" + dname + ",val:" + cname + ",; expires=" + set_expires.toGMTString(); d.p.biscuit.value = "保存済"; d.cookie = cook; return true; } function map() { var code = ""; var tr = ""; for (i = 0; i < 6; i++) { var td = ""; for (ii = 0; ii < 6; ii++) { for (iii = 0; iii < 6; iii++) { var ir = i*3; var iig = ii*3; var iiib = iii*3; code = c.charAt(ir) + c.charAt(ir) + c.charAt(iig) + c.charAt(iig) + c.charAt(iiib) + c.charAt(iiib); JAVA print qq| td += '<\\/a><\\/td>';\n|; print <<'JAVA'; } } tr += "" + td + "<\/tr>"; } return(tr); } function newwindow() { d.p.contna.selectedIndex = -1; JAVA print " d.p.sel.selectedIndex = $solid;\n"; print <<'JAVA'; sub = window.open("","color","width=520,height=135"); with (sub.document) { open(); write('カスタム<\/title>'); write('<SCRIPT type="text\/JavaScript">'); write('var o=document; var w=window.opener; var a2=new Array();'); write('function picup(co){'); write(' if(co != null){ a1 = new Array("#"+co); a3 = a1.concat(a2); }'); write(' else{ o.bgColor = "#FFFFFF"; }'); write(' for(k=0;k<Math.min(a3.length,14);k++){ o.z.se.options[k] = new Option(k+1+","+a3[k],a3[k]); a2[k] = a3[k]; } }'); write('function Del(){'); write(' var zzz=o.z.se.selectedIndex; if(zzz==-1) return;'); write(' o.z.se.options[zzz] = null; a3=new Array();'); write(' for(k=0;k<a2.length-1;k++) { a3[k] = o.z.se.options[k].value; }'); write(' a2=new Array(); picup(null); }'); write('function mouse(c){ o.bgColor = c; }'); write('function ch(k){ o.bgColor = k.options[k.selectedIndex].value; }'); write('<\/SCRIPT>'); write('<div align=center><form name=z><table border=0><tr><td><table border=0 cellpadding=0 cellspacing=0>'); write('<SCRIPT type="text\/JavaScript">o.write(w.map());<\/SCRIPT>'); write('<\/table><\/td><td align=center>'); write('<select name=se size=4 onChange="ch(this)"><\/select><br>'); write('<input type=button value="消" onClick="Del()"><input type=button value="登録" onClick="w.custom(a2)"><input type=button value="閉" onClick="top.close()">'); write('<\/td><\/tr><\/table><\/form><\/div>'); close(); } return false; } function BrightDark(bd) { BD = bd; var co = ""; pg = new Array(); pg = String(d.paintbbs.getColors()).split("\n"); for (ni = 0; ni < 14; ni++) { co += "#"+c.charAt(limit(1))+c.charAt(limit(2))+c.charAt(limit(3))+c.charAt(limit(4))+c.charAt(limit(5))+c.charAt(limit(6))+"\n"; } d.paintbbs.setColors(co); } function limit(k) { var v = c.indexOf(pg[ni].substr(k,1), 0)+BD; if (v > 15) v = 15; else if (v < 0) v = 0; return v; } function scale(x) { d.paintbbs.getMi().scaleChange(parseFloat(x.options[x.selectedIndex].value),true); } function slider(n) { var px = d.p.pixel.options[d.p.pixel.selectedIndex].value; var B = d.paintbbs.getInfo().m.iColor; var nanaco = B; var R = B>>16; B -= R*65536; var G = B>>8; B -= G*256; if (n) { nanaco += R<=255-px ?65536*px:65536*(255-R); nanaco += G<=255-px ?256*px:256*(255-G); nanaco += B<=255-px ?1*px:1*(255-B); } else { nanaco -= R>=px ?65536*px:65536*R; nanaco -= G>=px ?256*px:256*G; nanaco -= B>=px ?1*px:1*B; } var kyoco = d.paintbbs.getInfo().m.iAlpha; var alf = ((kyoco<128 ?kyoco:kyoco-256)*16777216)+nanaco; d.paintbbs.getToolBox().setARGB(alf); } JAVA } &header; &tables ('お絵描き',"<u>『$FORM{'name'}』絵画中</u>",$hisu); if ($banner5) { $banner5 =~ s/\0/\n/g; print "$banner5\n"; } printf qq|<p>\n<table border=0 cellpadding=3 bgcolor="%s"><tr><td align=center>\n|, $applet[3] || '#CCCCFF'; print qq|<applet code="$code.class"$codebase archive="$apllet" name=paintbbs width=$aws height=$ahs>\n|; if ($apch) { ¶m ('header_magic','P'); ¶m ('dir_resource',$dir_val); ¶m ('tt.zip',"${res}tt.zip"); ¶m ('res.zip',"${res}res_$apch.zip"); ¶m ('tools',$apch); ¶m ('layer_count',$layer_cnt); } else { ¶m ('tool_advance','false') if $t_advance; ¶m ('tool_alpha','false') if $t_alpha; } ¶m ('image_width',$yoco); ¶m ('image_height',$tate); ¶m ('image_size',$image_size); ¶m ('undo',$undo); ¶m ('undo_in_mg',$undo_in_mg); ¶m ('compress_level',$compress_level); ¶m ('send_language','euc'); ¶m ('send_header_image_type','true'); ¶m ('poo','false'); if ($s_url) { ¶m ('security_click',$s_click) if $s_click; ¶m ('security_timer',$s_timer) if $s_timer; ¶m ('security_url',$s_url); ¶m ('security_post','false'); } my @para = qw|image_bkcolor image_bk color_text color_bk color_bk2 color_icon color_frame color_iconselect color_bar color_bar_hl color_bar_frame_hl bar_size tool_color_button tool_color_button2 tool_color_text tool_color_bar tool_color_frame|; foreach (0..16) { $applet[$_] eq '' && next; print qq|<param name=$para[$_] value="$applet[$_]">\n|; } for (my $i = 0; $i <= $#color_1_14; $i++) { $color_1_14[$i] eq '' && next; print '<param name=color_', ($i + 1) ,qq| value="$color_1_14[$i]">\n|; } ¶m ('send_header',$send_header); ¶m ('url_save',"$scriptdir$getpic"); if ($replace) { my $pcim = 'pch_file'; unless ($FORM{'sion'} eq $pch || $FORM{'sion'} eq $spch || $kirikae) { $pcim = 'image_canvas'; $mation = 0; } my $iti = $htmlcgi ?"$ct_sct?":$image; ¶m ("$pcim","$iti$replace$FORM{'sion'}"); } ¶m ('thumbnail_type','animation') if $mation; ¶m ('image_jpeg','true') if $i_jpeg; ¶m ('image_interlace','true') if $i_interlace; if ($addparam) { $addparam =~ s/<br>/\n/g; print "$addparam\n"; } print qq|</applet>\n<div style="color:$co2" class=f10>|; print '[アニメーション記録中]' if $mation; print " [絵画開始時刻$start]" if $aptime; print "</div></td>\n"; if ($mac) { my $st = qq| style="background-color:$co3; color:$co2; border:1px solid $co4"|; print <<"HTML"; <form name=p><td valign=top align=center> <font face="verdana,Times New Roman,Arial"$st>PALLET DATA</font>  <span id=ap style="position:absolute; z-index:1"></span><br> <br> <input type=checkbox name=auto value="1" checked onClick="NonPost()"><font size=2$st>Auto-Post</font><br> <select name=sel size=7 onChange="Set(1,this)"$st> HTML foreach (0..$#colordata) { print "<option>$colordata[$_][0]\n"; } print <<"HTML"; <option>カスタム </select><br> <input type=button value="明↑" onClick="BrightDark(1)"$st> <input type=button value="暗↓" onClick="BrightDark(-1)"$st><br> <input type=button value="カスタム" onClick="return newwindow()"$st><br> <br> <select name=codi onChange="Set(0,this)"$st> <option value="">コーディネート <option value="0">スレッド背景色 <option value="1">コメント背景色 <option value="2">文字色 </select><br> <br> <select name=contna size=5 onChange="Set(2,this)"$st> <option>+コンテナ+ </select><br> <input type=button value="保管" onClick="Temp(p.contna)"$st> <input type=button value="消去" onClick="Chang(p.contna)"$st><br> <input type=button name=biscuit value="クッキー" onClick="cook()"$st> HTML if ($apch) { print qq|<br> <br><select name=big onChange="scale(this)"$st>\n<option value="0"> 倍率\n|; foreach (1,2,4,8,16) { print qq|<option value="$_">$_ 倍\n|; } print "</select><br> <br>\n"; print <<"HTML"; <input type=button value="←左" onClick="slider(0)"$st title="RGBスライダー"> <input type=button value="右→" onClick="slider(1)"$st title="RGBを同時に移動させます"><br> <select name=pixel$st> <option value="16">単位 HTML foreach (1,2,4,8,10,20) { print qq|<option value="$_">$_\n|; } print "</select>\n"; } print <<'JAVA'; </td></form> <SCRIPT type="text/JavaScript"> <!-- ck = d.cookie + ";"; if (ck && (ck.indexOf("PTCOLOR", 0) >= 0)) { var cs = ck.indexOf("PTCOLOR" + "=", 0) + 8; var ce = ck.indexOf(";", cs); get = ck.substring(cs, ce); day = splt("txt"); cargo = splt("val"); for (n = 0; n < day.length; n++) { cargo[n] = "#" + cargo[n].match(/\w{6}/g).join("\n#"); d.p.contna.options[n] = new Option(day[n],cargo[n]); flag++; } } function splt(t) { t += ":"; var l = get.indexOf(t, 0); var v = get.substring(l+t.length, get.indexOf(",", l)); if (t == "txt:") v = unescape(v); return(v.split("_")); } //--> </SCRIPT> JAVA } if ($banner6) { $banner6 =~ s/\0/\n/g; } print "</tr></table>\n<p>$banner6\n</div><br><hr size=1>\n"; &footer; exit; } # # パラメータ共通 # sub param { my ($p1,$p2) = @_; return print qq|<param name=$p1 value="$p2">\n|; } # # アニメーション再生 # sub pchviewer { (!$animation || !$pctart || "$FORM{'h'}$FORM{'w'}$FORM{'clr'}" =~ /\D/ || $FORM{'pch'} !~ /^\d+(?:\Q$pch\E|(\Q$spch\E))$/) && &error ('不正な入力です'); my $file = "$html_img_dir"."$image"."$FORM{'pch'}"; -e "$file" || &error ('ファイルの存在を確認出来ませんでした'); my ($lyr,$buf,$stdpro,$ptate,$pta,$pyoco,$pyo) = 2; if ($1) { open (PCH,"$file"); read (PCH,$buf,50); close (PCH); ($lyr) = $buf =~ /layer_last=(\d+)/; $stdpro = 2; } $ptate = $pta = $FORM{'h'}; $pyoco = $pyo = $FORM{'w'}; $pta += 26; if ($pyo < 150) { $pyo = 150; } my $co0 = $colormenu[$FORM{'clr'}][0]; my $co1 = $colormenu[$FORM{'clr'}][1]; my $co2 = $colormenu[$FORM{'clr'}][2]; my $mac = $ENV{'HTTP_USER_AGENT'} !~ /Mac/i; &type; print <<'JAVA'; function Speed(i) { d.pch.setSpeed(i.options[i.selectedIndex].value); } function layer(s,n) { var is = n.checked ?255:0; d.pch.setVisit(s,is); } JAVA &header; &java_ok; print qq|<div align=center>\n<table border=0 cellpadding=5 bgcolor="$co0"><tr>\n|; if ($mac && ($lyr > 5 && $lyr <= 12)) { print "<form name=que2><td valign=bottom>\n"; &que ($lyr,'que2',$co2); print "</td></form>\n"; } print qq|<td valign=bottom><applet code="pch$stdpro.PCHViewer.class" codebase="$htmldir" archive="PCHViewer.jar" name=pch width=$pyo height=$pta>\n|; if ($stdpro) { ¶m ('res.zip','./res/res.zip'); ¶m ('tt.zip','./res/tt.zip'); } else { ¶m ('image_width',$pyoco); ¶m ('image_height',$ptate); } ¶m ('buffer_canvas','false'); ¶m ('speed','5'); ¶m ('run','false') unless $pchrun; ¶m ('pch_file',"$image$FORM{'pch'}"); ¶m ('color_back',$co0); ¶m ('color_text',$co2); ¶m ('color_icon',$co0); ¶m ('color_bar',$co1); ¶m ('color_frame',$co2); ¶m ('color_bar_select',$co1); print "</applet></td>\n<form name=que><td align=right valign=bottom>\n"; if ($pchdl) { print qq|<small style="color:$co2">[<a href="$htmldir$image$FORM{'pch'}" target=_blank>Download</a>]<br>|, (-s "$file") ,"Byte</small><br> <br>\n"; } if ($mac) { print <<"HTML"; <select name=M size=7 onchange="Speed(this)" style="background-color:$co0; color:$co2"> <option value="-1">速い <option value="0">↑ <option value="3">↑ <option value="5" selected>標準 <option value="10">↓ <option value="15">↓ <option value="25">遅い </select><br> HTML if ($lyr <= 5) { &que ($lyr,'que',$co2); } } print <<"HTML"; <br><input type=button value="閉" onClick="top.close();" style="background-color:$co0; color:$co2; border:1px solid $co2"> </td></form> </tr></table> </div> </body></html> HTML exit; } # # アニメレイヤー # sub que { my ($ley,$fna,$c) = @_; print qq|<small style="color:$c">\n|; while ($ley--) { print qq|<input type=checkbox name=L$ley onClick="layer($ley,$fna.L$ley)" checked>レイヤ$ley<br>\n|; } print "</small>\n"; } # # 版画モード # sub draw { (!$hanga || $FORM{'no'} =~ /\D/) && &error ('不正な入力です'); open (ADD,"$dir$FORM{'no'}$extension") || &error ('ファイルが開きませんでした'); my ($no,$name,$sub,$dore,$gazo,$anime,$chk,$wi,$hi,$si,$add) = (split /<>/,<ADD>)[0,3,4,7,13,14,16..19,22]; close (ADD); (!$add || !$dore || $chk) && &error ('不正な入力です'); if ($dore >= 5) { $dore -= 3; } my $i = $dore == 1 ?1:0; my ($w,$h) = ((split /,/,$wi)[$i],(split /,/,$hi)[$i]); if ($dore == 2) { $defap = 0; } elsif ($dore >= 3 && $defap == 0) { $defap = 1; } unless ($anime) { $animation = 0; } my $g_s = int ($si / 1024).'KB'; &type; &java_oekaki; &java_cookie_sp; &header; &tables ('版画モード',"[<a href=\"$script?mode=howto\">使い方</a>] \n[$no] $name様提供の作品名『$sub』",'この作品に対して続きを書くことを作者が許可しています。(新規投稿扱い)'); &java_ok; print <<"HTML"; <img src="$htmldir$image$no$gazo" width=$w height=$h alt=$g_s><p> <form action="$script" method=POST name=main onSubmit="return need(main.name,main.pwd)"> <input type=hidden name=mode value="picture"> <input type=hidden name=drawing value="$no"> <input type=hidden name=tateyoco value="$h,$w"> <table border=0 cellpadding=5><tr> HTML &choice; &napa ('版画する'); printf "</tr><tr><td colspan=%d>\n", ($shipaint == 2 || ($shipaint == 1 && $shi_stdpro == 0)) ?3:2; &hidden ($anime,$gazo,$dore,$no,$g_s); &java_cookset (1,0); print "</div><hr size=1>\n"; &footer; exit; } # # NamePassフィールド # sub napa { my $np = shift; print <<"HTML"; <td><tt>Name</tt> <input type=text name=name size=15 class=ms><br> <tt>Pass</tt> <input type=password name=pwd size=8 maxlength=8 class=ms></td> <td><input type=submit value="$np" class=ms><br> HTML if ($animation == 2) { print qq|<input type=hidden name=manga value="1">\n|; } elsif ($animation) { print qq|<input type=checkbox name=manga value="1" checked>Animation\n|; } print "</td>\n"; } # # アプレット選択 # sub choice { if ($shipaint == 2 || ($shipaint == 1 && $shi_stdpro == 0)) { print "<td><small>Applet Choice</small><br>\n<select name=shii class=ms>\n"; if ($shipaint == 2) { print qq|<option value="">PaintBBS\n|; } if ($shi_stdpro != 2) { printf qq|<option value="std"%s>しぃペインター\n|, $defap == 1 ?' selected':''; } if ($shi_stdpro != 1) { printf qq|<option value="pro"%s>しぃペインターPRO\n|, $defap == 2 ?' selected':''; } print "</select></td>\n"; } else { if ($shipaint) { if ($shi_stdpro == 1) { print qq|<input type=hidden name=shii value="std">\n|; } else { print qq|<input type=hidden name=shii value="pro">\n|; } } } } # # 記事表示 # sub print_cgi { my ($number,$handoru,$items); local *threads = shift; my @order = split (/,/,$threads); if ($res_top && exists $FORM{'sort'}) { @order = sort{$b <=> $a}@order; $items = "<input type=hidden name=sort>\n"; } my ($page,$end,$datas) = &syori ($FORM{'page'},$p_log,$#order); @order = @order[$page..$end]; if ($kakusu) { print <<'JAVA'; if (d.getElementById || (d.all && !(d.getElementById))) ie = 1; else ie = 0; function Hide(id) { if (d.all(id).style.display == "none") d.all(id).style.display = ""; else d.all(id).style.display = "none"; } function resform(m,v) { if (ie) d.write('<input type="button" onClick="Hide(\'p' + m + '\')" style="cursor:pointer" class="ie' + v + '" value="Comment Form">'); } JAVA &java_noclick; } &java_oekaki; &java_cookie_sp; &java_mail if $mailascii; &java_new; &header; # if ($banner1) { # $banner1 =~ s/\0/\n/g; # print "$banner1<p>\n"; # } if ($counter) { print <<"JAVA"; <table cellspacing="0" cellpadding="0" border="0" width="640" align="center"> <tr> <td rowspan="4" valign="top"><script src="./count.cgi?whatnew"></script><noscript><img src="$top_image" width="200" height="200" alt=""></noscript></td> <td><img src="${htmldir}space.gif" width="10" height="35" alt=""></td> <td align="right" valign="top" class="title" lang="en">paint/upload bbs </td> </tr> <tr> <td><img src="${htmldir}space.gif" width="10" height="100" alt=""></td> <td align="right" valign="top">$banner1</td> </tr> <tr> <td><img src="${htmldir}space.gif" width="10" height="75" alt=""></td> <td align="right" valign="bottom"><div class="e10">$update<br> <SCRIPT type="text/JavaScript"> <!-- var s = "$script"; var h = "$htmlfile"; var ok = (d.referrer.indexOf(s) > 0 || d.referrer.indexOf(h) > 0) ?"?non":""; d.write('<SCRIPT src="$scriptdir$ct_sct' + ok + '"><\\/SCRIPT>'); //--> </SCRIPT></div></td> </tr> <tr> <td><img src="${htmldir}space.gif" width="10" height="5" alt=""></td> <td><img src="${htmldir}space.gif" width="430" height="5" alt=""></td> </tr> </table> JAVA } print "<div align=center>\n"; print "$h_title\n"; if ($banner3) { $banner3 =~ s/\0/\n/g; print "<br> <br>$banner3\n"; } print "<hr width=640>\n"; &menu (0); print "<hr width=640>\n"; if ($banner7) { $banner7 =~ s/\0/\n/g; print "<table><tr><td>$banner7</td></tr></table>\n"; } $pctart && print qq|<br><table border=1 cellpadding=8 bgcolor="$f_ms_bc" bordercolor="$f_ms_li"><tr>\n|; if ($pctart == 1) { print <<"HTML"; <form action="$scriptaddr" method=GET> <input type=hidden name=mode value="contribute"> <td align=center><input type=submit value="$subg" class=ms></td> </form> HTML } if ($pctart >= 1) { print <<"HTML"; <td align=center> <table border=0 cellspacing=2><tr> <form action="$scriptaddr" method=POST name=main onSubmit="return need(main.name,main.pwd)"> <input type=hidden name=mode value="picture"> HTML &choice; print '<td><small>Canvas Size'; if ($sizemode == 1) { print "<br>縦<select name=tate class=ms>\n"; foreach (@cs1) { print qq|<option value="$_">$_\n|; } print "</select>×横<select name=yoco class=ms>\n"; foreach (@cs1) { print qq|<option value="$_">$_\n|; } print "</select></small>\n"; } elsif ($sizemode == 2) { print "<br>縦×横</small><select name=tateyoco class=ms>\n"; foreach (0..$#cs2) { print qq|<option value="$cs2[$_][0],$cs2[$_][1]">$cs2[$_][0]×$cs2[$_][1]\n|; } print "</select>\n"; } else { print qq| ($cs0_s‐$cs0_m)<br>縦 <input type=text name=tate size=3 style="ime-mode:disabled" class=ms>×横 <input type=text name=yoco size=3 style="ime-mode:disabled" class=ms></small>\n|; } print "</td>\n"; &napa ($subp); print "</form></tr></table>\n"; &java_ok; } $pctart && print "</td></tr></table><br>\n<hr>"; print "<p>\n"; local ($hide,$clr0,$clr1,$clr2,$new24,$admin,$hid,$sname,$smail,$surl,$scom,$ppwd,$appear) = 0; foreach $number (@order) { my $file = "$dir"."$number"."$extension"; if (!open (IN,"$file")) { print "<hr width=600><b>「$number」のスレッドが消失した可能\性があります。</b><hr width=600><br> <br>\n"; } else { my (@read) = <IN>; close (IN); local ($no,$reno,$date,$name,$sub,$com,$handl,$dore,$oe,$mail,$url,$syu,$kaki,$gazo,$anime,$color,$chk,$wi,$hi,$size,$watch,$send,$add) = split (/<>/,shift(@read)); &clr; &sagyou (1); &letter_oya; print qq|<hr size=1 style="color:$clr0"></td>\n</tr><tr>\n|; my ($v,$rv,$reads,$none) = (0,0); if ($review && $#read >= $review) { $rv = ($#read + 1) - $review; } foreach $reads (@read) { if ($review && $rv) { $v++; $v <= $rv && next; } ($no,$reno,$date,$name,$dummy,$com,$handl,$dummy1,$oe,$mail,$url,$syu,$kaki) = split (/<>/,$reads); &sagyou (1); &letter_re; } if ($rv) { print qq|<tr><td colspan=2 align=right><small>[<a href="$scriptaddr?mode=preview&no=$no">$rv件省略 レスの全表\示</a>]</small></td></tr>\n|; } if (!$reslimit || $#read+1 < $reslimit) { if ($kakusu) { $appear = qq|<SCRIPT type="text/JavaScript">resform($hide,$color)</SCRIPT>\n|; $none = qq|<SCRIPT type="text/JavaScript">if (ie) d.all("p$hide").style.display = "none";</SCRIPT>\n|; } &resform; $hide++; } else { print qq|<td colspan=2 align=right><small style="$clr2">レス数の上限に達しました</small></td>\n|; } print "</tr></table>\n</td></tr></table></td></tr></table>\n$none<br> <br> <br>\n"; } } if ($drctido) { print "</div>\n"; } my $next_page = $end + 1; my $back_page = $page - $p_log; print "<hr><br><table border=0 cellpadding=5><tr>\n"; $back_page >= 0 && &nxt_bak ($back_page,'前',$items); $end != $datas && &nxt_bak ($next_page,'次',$items); $drctido && ($datas+1 > $p_log) and &drct ($datas,$page,$items); print "</tr></table>\n"; if (!$drctido) { print "</div>\n"; } $cotei and $handoru = qq|<option value="handoru_admin">コテハン\n|; print <<"HTML"; <table border=0 width="98%"><tr> <form action="$scriptaddr" method=POST> <input type=hidden name=mode value="change"> <td align=right> <small>記事No</small><input type=text name=del size=4 style="ime-mode:disabled" class=ms> <small>Res</small><input type=text name=re size=3 style="ime-mode:disabled" class=ms> <small>Pass</small><input type=password name=pwd size=6 maxlength=8 class=ms> <select name=changed class=ms> <option value="revision">修正 <option value="eliminate">削除 <option value="admin_pwd">設定画面 $handoru</select> <input type=submit value="実行" class=ms> </td></form> </tr></table> HTML &java_cookset ($pctart,0,$kakusu,$hide); if ($banner2) { $banner2 =~ s/\0/\n/g; print "<br>$banner2<p>\n"; } &footer; } # # カラー # sub clr { $clr0 = $colormenu[$color][0]; $clr1 = $colormenu[$color][1]; $clr2 = 'color:'."$colormenu[$color][2]"; } # # 表示前作業 # sub sagyou { my $kt = shift; if ($mail) { $name = sprintf ("<a href=\"%s\">$name</a>", $mailascii ?"javascript:void(0)\" onClick=\"href=mail($mail)":"mailto:$mail"); } if ($handl) { $name .= " <wbr>$certify"; } if ($browser) { $com .= "<br> <br><small>$oe</small>"; } if ($syu) { $date .= " ($syu)"; } if ($kt) { $new24 = qq|<SCRIPT type="text/JavaScript">NewMark($kaki)</SCRIPT>|; } } # # 親 # sub letter_oya { my $s_p = ''; if ($dore >= 2) { if ($dore >= 5) { $s_p = 'UP '; $dore -= 3; } $s_p .= $dore == 2 ?'PBBS ':($dore == 3 ?'STD ':'PRO '); $dore = 2; } print qq|<table width="$twid" border=0 cellspacing=2 bgcolor="$clr0"><tr><td>\n<table width="100%" border=0 cellspacing=0 cellpadding=8><tr>\n|; if ($typeab) { print qq|<td colspan=2 bgcolor="$clr1"><span style="$clr2">[No.$no] <b>$sub</b></span></td>\n</tr><tr>\n|; if ($gazo) { print qq|<td valign=top align=center style="$clr2"><br>|; } } else { print <<"HTML"; <td bgcolor="$clr1"> <table width="100%" border=0><tr> <td><span style="$clr2">[No.$no] <b>$sub</b></span></td> <td nowrap align=right>$new24 <small style="$clr2">$date</small></td> </tr><tr> <td colspan=2 bgcolor="$clr0"> <div style="$clr2" class=margin>$send<b>$postman[$dore]</b> $name $url</div> <p align=center style="$clr2"> HTML } if ($gazo) { if ($chk) { if ($chk == 2) { print "$kakimark\n"; } else { print "$soon\n"; } } else { if ($dore == 1) { my ($w,$w1) = split (/,/,$wi); my ($h,$h1) = split (/,/,$hi); print qq|<a href="$htmldir$image$no$gazo" target=_blank><img src="$htmldir$image$no$gazo" width=$w height=$h border=$border alt="$h1 * $w1 / ${size}byte($gazo)"></a><br>\n|; } else { if ($cutter) { my ($wi1,$hi1) = ($wi,$hi); if ($wi1 > $w_maxlimt) { $hi1 = int ($hi1 * ($w_maxlimt / $wi1)); $wi1 = $w_maxlimt; } if ($hi1 > $h_maxlimt) { $wi1 = int ($wi1 * ($h_maxlimt / $hi1)); $hi1 = $h_maxlimt; } print qq|<a href="$htmldir$image$no$gazo" target=_blank><img src="$htmldir$image$no$gazo" width=$wi1 height=$hi1 border=$border alt="$s_p$hi * $wi / ${size}byte($gazo)"></a><br>\n|; } else { print qq|<img src="$htmldir$image$no$gazo" width=$wi height=$hi alt="$s_p$hi * $wi / ${size}byte($gazo)"><br>\n|; } print '<nobr class=f10>'; if ($animation && $anime) { print qq|【<a href="$scriptaddr?mode=viewer&pch=$no$anime&w=$wi&h=$hi&clr=$color" target=_blank>アニメ再生</a>】|; } if ($aptime && $watch) { my ($j) = split (/,/,$watch); print " <wbr>【$j】"; } print "</nobr>\n"; } if ($hanga && $add) { print qq|<nobr class=f10> 【<a href="$scriptaddr?mode=draw&no=$no">版画</a>】</nobr>|; } } } if ($typeab) { if ($gazo) { print "</td>\n"; } print <<"HTML"; <td width="95%" valign=top> <table width="100%" border=0 cellspacing=0 cellpadding=5 bgcolor="$clr1"><tr> <td><span style="$clr2"><nobr>$send<b>$postman[$dore]</b> $name<wbr> $url</nobr></span></td> <td nowrap align=right>$new24 <small style="$clr2">$date</small></td> </tr><tr> <td colspan=2><div style="$clr2" class=margin>$com</div> HTML } else { print <<"HTML"; </p><div style="$clr2" class=margin>$com</div><br></td> </tr><tr> <td colspan=2> HTML } } # # レス # sub letter_re { print <<"HTML"; <td><span style="$clr2"><nobr>[Res.$reno] $inyomark $name<wbr> $url</nobr></span></td> <td nowrap align=right>$new24 <small style="$clr2">$date</small></td> </tr><tr> <td colspan=2><div style="$clr2" class=margin>$com</div> <hr size=1 style="color:$clr0"></td> </tr><tr> HTML } # # レスフォーム # sub resform { print "<td colspan=2 align=center>\n"; unless ($kakusu) { print <<"HTML"; <form action="$scriptaddr" method=GET> <input type=hidden name=mode value="preview"> <input type=hidden name=no value="$no"> <input type=submit value="返信する" style="cursor:pointer" class=ie$color> </form></td> HTML return 1; } print <<"HTML"; $appear<table border=0 cellspacing=0 id=p$hide> <form action="$scriptaddr" method=POST name=res$hide onSubmit="return noclick(d.res$hide)"> $hid<input type=hidden name=mode value="regist"> <input type=hidden name=reno value="$no"> <tr> <td><small style="$clr2">Name</small></td> HTML if ($typeab) { print <<"HTML"; <td><input type=text name=name size=24 value="$sname" class=ie$color></td> </tr> <tr> <td><small style="$clr2">Pass</small></td> <td> HTML $admin || print qq|<input type=password name=pwd size=8 value="$ppwd" class=ie$color>\n|; print <<"HTML";           <input type=submit value="Submit" style="cursor:pointer" class=ie$color></td> </tr><tr> <td colspan=2><textarea name=comment rows=3 cols=35 wrap=soft class=ie$color>$scom</textarea></td> </tr><tr> HTML } else { print <<"HTML"; <td colspan=2><input type=text name=name size=25 value="$sname" class=ie$color></td> <td rowspan=2 colspan=2><textarea name=comment rows=3 cols=35 wrap=soft class=ie$color>$scom</textarea></td> </tr> <tr> <td><small style="$clr2">Pass</small></td> <td> HTML $admin || print qq|<input type=password name=pwd size=8 value="$ppwd" class=ie$color>|; print <<"HTML"; </td> <td colspan="3" align=right><input type=submit value="返信" style="cursor:pointer" class=ie$color></td> HTML } print "</tr></form>\n</table>\n</td>"; } # # 投稿フォーム # sub form { my $mit = shift; my ($n_w,$s_w,$c_w,$u_w); if ($ENV{'HTTP_USER_AGENT'} =~ /MSIE/i) { $n_w = 30; $s_w = 40; $c_w = 60; $u_w = 62; } elsif ($ENV{'HTTP_USER_AGENT'} =~ /Gecko/i) { $n_w = 30; $s_w = 35; $c_w = 50; $u_w = 60; } else { $n_w = 22; $s_w = 25; $c_w = 58; $u_w = 50; } print <<"HTML"; <form action="$script" method=POST$mit name=main onSubmit="return noSubmit(d.main)"> $hid<input type=hidden name=mode value="regist"> <table border=0 cellspacing=0> <tr> <td>お名前</td> <td><input type=text name=name size=$n_w value="$sname" class=ms></td> </tr> <tr> <td>タイトル</td> <td><input type=text name=sub size=$s_w value="$ssub" class=ms>    <input type=submit name=submit value="投稿する" style="cursor:pointer" class=ms> <input type=reset value="リセット" class=ms></td> </tr><tr> <td colspan=2><textarea name=comment wrap=soft rows=4 cols=$c_w class=ms>$scom</textarea></td> </tr><tr> HTML ($admin || $arts) || print "<td>画像</td><td><input type=file name=image size=$u_w class=ms></td>\n</tr><tr>\n"; print <<"HTML"; <td colspan="2"></td> </tr><tr> HTML $admin || print qq|<td>Pass</td><td><input type=password name=pwd size=8 maxlength=8 value="$ppwd" class=ms> <small>(記事の修正・削除に使用)</small></td>\n|; print "</tr><tr>\n<td>カラー</td>\n<td>\n"; my $i = 0; foreach (0..$#colormenu) { printf qq|<input type=radio name=color value="$_"%s onClick="clr('$colormenu[$_][0]','$colormenu[$_][1]','$colormenu[$_][2]');"><font color="$colormenu[$_][0]">■</font><font color="$colormenu[$_][1]">■</font><font color="$colormenu[$_][2]">■</font> \n|, $_ == $sc ?' checked':''; $i++; if ($i % 5 == 0) { print "<br>\n"; } } if ($hanga) { print "</td>\n</tr><tr>\n<td>版画</td>\n"; printf qq|<td><input type=checkbox name=ok value="1"%s> <small>(第三者が続きを書くのを許可する)</small>\n|, $sok ?' checked':''; } ($FORM{'id'} && $arts && $aptime == 2) && print qq|</td>\n</tr><tr>\n<td>時間</td><td><input type=checkbox name=notime value="1"> <small>(絵画時間の記録のキャンセル)</small>\n|; if ($kakikake && $arts) { printf qq|</td>\n</tr><tr>\n<td>途中</td><td><input type=checkbox name=wait value="1"%s> <small>(描きかけ等で一時的に非表\示にする)</small>\n|, $schk == 2 ?' checked':''; } print "</td>\n</tr>\n</table>\n</form>\n"; } # # 1スレッド表示(返信・キーワード) # sub preview { "$FORM{'no'}$FORM{'log'}$FORM{'pv'}" =~ /\D/ && &error ('不正な入力です'); my ($ue,$msgfile,$lines,$flag,@lone) = 0; if (exists $FORM{'log'}) { $msgfile = "$olddir".'old'."$FORM{'log'}"."$extension"; open (MSG,"$msgfile") || &error ('ファイルが見つかりませんでした'); while (<MSG>) { my ($old_no,$old_re,$o2,$o3,$o4,$o5,$o6,$o7,$dead,$o9,$o10,$o11,$o12,$o13,$o14,$o15,$o16,$o17,$o18,$o19,$o20,$o21) = split /<>/; if ($FORM{'no'} eq $old_no) { if ($old_re) { unshift (@lone,"$old_no<>$old_re<>$o2<>$o3<><>$o5<>$o6<><>$o9<>$o10<>$o11<>$o12<><>\n"); } else { unshift (@lone,"$old_no<>0<>$o2<>$o3<>$o4<>$o5<>$o6<>$o7<>$o9<>$o10<>$o11<>$o12<><>$o13<>$o14<>$o15<>$o16<>$o17<>$o18<>$o19<>$o20<>$o21<><>\n"); } $flag = 1; } } close (MSG); $flag || &error ('不正な入力です'); $ue = 2; } else { $msgfile = "$dir"."$FORM{'no'}"."$extension"; open (MSG,"$msgfile") || &error ('ファイルが見つかりませんでした'); @lone = <MSG>; close (MSG); if (!$reslimit || $#lone < $reslimit) { $ue = 1; } } &type; if ($ue == 1) { &java_noclick; &java_cookie_sp; } &java_new if ($ue != 2); &java_mail if $mailascii; &header; &menu (1); print "<div align=center><br>\n"; if (exists $FORM{'pv'}) { printf "選んだ記事は%sです。<p>\n", $FORM{'pv'} ?"Res\.$FORM{'pv'}":'親記事'; } $kakusu = 1; local ($no,$color,$hide,$clr0,$clr1,$clr2,$new24,$admin,$appear,$hid,$sname,$smail,$surl,$scom,$ppwd); foreach $line (@lone) { local ($num,$reno,$date,$name,$sub,$com,$handl,$dore,$oe,$mail,$url,$syu,$kaki,$gazo,$anime,$cl,$chk,$wi,$hi,$size,$watch,$send,$add) = split (/<>/,$line); if ($ue <= 1) { &sagyou (1); } else { &sagyou (0); } if ($reno) { &letter_re; } else { $no = $num; $color = $cl; &clr; &letter_oya; print qq|<hr size=1 style="color:$clr0"></td>\n</tr><tr>\n|; } } if ($ue == 1) { &resform; } elsif ($ue == 0) { print qq|<td colspan=2 align=right><small style="$clr2">レス数の上限に達しました</small></td>\n|; } print "</tr></table>\n</td></tr></table>\n</td></tr></table>\n"; print qq|<br><form><input type=button value="前の画面に戻る" onClick="history.back();" class=ms></form>\n</div><hr>\n|; if ($ue == 1) { print <<'JAVA'; <SCRIPT type="text/JavaScript"> <!-- get_cook = getCookie("PALLET"); if (get_cook != null) { flag = ""; setting(d.res); } //--> </SCRIPT> JAVA } &footer; exit; } # # ページ移動 # sub nxt_bak { my ($nb,$doti,$it) = @_; print <<"HTML"; <form action="$scriptaddr" method=POST><td> <input type=hidden name=page value="$nb"> $it<input type=submit value="$dotiの$p_log件" class=ms> </td></form> HTML } # # ダイレクト移動 # sub drct { my ($owari,$vpage,$st) = @_; my $pg = int ($owari / $p_log); my $af = $vpage / $p_log; my $ph = 0; print "<td><small>ダイレクト移動:\n"; for (my $i = 0; $i <= $pg; $i++) { $ph++; if ($i == $af) { print "[<b>$ph</b>] \n"; } else { printf qq|[<a href="$scriptaddr?page=|.($i * $p_log).qq|%s">$ph</a>]\n|, $st ?'&sort=1':''; } } print "</small></td>\n"; } # # 改ページ処理 # sub syori { my ($pa,$pl,$or) = @_; $pa =~ s/\D//g; my $pag = $pa ?$pa:0; my $en = $pag + $pl - 1; $en >= $or and $en = $or; return ($pag,$en,$or); } # # HTMLファイル手動更新 # sub refresh { delete $FORM{'page'}; &lock; my ($threads) = (split /<>/,&id)[4]; &html (\$threads); $rssview && &rss (\$threads); &unlock; local $loct = "$htmlurl"."$htmlfile"; &location; } # # 書き込み後に移動 # sub location { if ($imode) { delete $FORM{'i'}; &docomo_view; } elsif ($toku) { print "Content-type: text/html\n\n"; print qq|<html><head><META HTTP-EQUIV="Refresh" CONTENT="0; URL=$loct"></head><body></body></html>\n|; } else { print "Location: $loct\n\n"; } exit; } # # 過去ログ表示 # sub past_view { !$pastuse && &error ('不正な入力です'); open (NO,"$sytm$management") || &error ('管理ファイルが開きませんでした'); my ($count) = (split /<>/,<NO>)[2]; close (NO); my $pastlog = $FORM{'pastlog'} || $count; ("$pastlog$FORM{'pastpage'}" =~ /\D/ || $pastlog > $count) && &error ('ファイルが壊れているか不正な値です'); my $ptpe = $FORM{'pastpage'} ne '' ?('&pastpage='.$FORM{'pastpage'}):''; my ($tugi,@pp); while ($count--) { push (@pp,$count+1); } my ($page,$end,$datas) = &syori ($FORM{'pastpage'},15,$#pp); @pp = @pp[$page..$end]; my $hit = $ptpe && !$FORM{'pastlog'} ?$pp[0]:$pastlog; &type; &java_mail if $mailascii; &header; &menu (4); print '<br>ページ:'; if ($datas > 14) { if ($page == 0) { print '【≪】'; } else { print qq|【<a href="$script?mode=past_view&pastpage=|, ($page-15) ,qq|">≪</a>】\n|; } if ($end == $datas) { $tugi = '【≫】'; } else { $tugi = qq|【<a href="$script?mode=past_view&pastpage=|. ($end+1) .qq|">≫</a>】\n|; } } if ($hit == $pp[0]) { print '【<】 '; } else { print qq|【<a href="$script?mode=past_view&pastlog=|, ($hit+1) ,qq|$ptpe"><</a>】\n|; } foreach (@pp) { if ($hit == $_) { print "[<b>$_</b>]\n"; } else { print qq|[<a href="$script?mode=past_view&pastlog=$_$ptpe">$_</a>]\n|; } } if ($hit <= $datas - $end + 1) { print '【>】'; } else { print qq|【<a href="$script?mode=past_view&pastlog=|, ($hit-1) ,qq|$ptpe">></a>】\n|; } print "$tugi<br> <br><hr><br><div align=center>\n"; my $pastfile = "$olddir".'old'."$hit"."$extension"; if (!open (READ,"$pastfile")) { print qq|<table border=1 width="$twid" cellpadding=2 cellspacing=0 bgcolor="$f_ms_bc" bordercolor="$f_ms_li"><tr><th>\n|; print qq|<font color="$f_ms_mo">現在、過去ログとしての記事はありません。</font></th></tr></table>\n|; } else { my ($fsize,$frequency,$buf,$begin,$oline,$tabend,$cc,@lines); local ($clr0,$clr1,$clr2,$new24,$add); binmode (READ); $fsize = (-s READ) / 10240; $frequency += $fsize <=> ($frequency = int ($fsize)); while ($frequency--) { seek (READ,10240*$frequency,0); read (READ,$buf,10240); $buf .= $begin; ($begin,@lines) = split (/\x0A/,$buf); $frequency == 0 && unshift (@lines,$begin); foreach $oline (reverse @lines) { local ($no,$reno,$date,$name,$sub,$com,$handl,$dore,$dummy,$oe,$mail,$url,$syu,$gazo,$anime,$color,$dummy1,$wi,$hi,$size,$watch,$send) = split (/<>/,$oline); if ($tabend ne '' && $no ne $tabend) { print "</tr></table>\n</td></tr></table>\n</td></tr></table>\n<br> <br> <br>\n"; } &sagyou (0); unless ($reno) { &clr; &letter_oya; print qq|<hr size=1 style="color:$clr0"></td>\n</tr><tr>\n|; $tabend = $no; $cc = $color; } else { $color = $cc; &letter_re; } } } close (READ); print "</tr></table>\n</td></tr></table>\n</td></tr></table>\n"; } print "</div><br><hr>\n"; &footer; exit; } # # 記事・モード振り分け # sub change { $limit || &error ('制限されている投稿方法です'); &refe; "$FORM{'del'}$FORM{'re'}" =~ /\D/ && &error ('記事ナンバーは半角数字で入力して下さい'); $FORM{'pwd'} eq '' && &error ('パスワードが入力されていません'); local $admin = $FORM{'pwd'} eq $pass ?1:0; if ($admin && $FORM{'del'} eq '' && $FORM{'re'} eq '') { if ($FORM{'changed'} eq 'admin_pwd') { require $master_script; &custom; } if ($FORM{'changed'} eq 'handoru_admin') { require $lib_script; &myname; } } $FORM{'del'} eq '' && &error ('記事Noが入力されていません'); local $changefile = "$dir"."$FORM{'del'}"."$extension"; (-e "$changefile") || &error ('記事ファイルが見つかりませんでした'); local $renum = sprintf ("%d", $FORM{'re'}); if ($FORM{'changed'} eq 'revision') { &revision; } if ($FORM{'changed'} eq 'eliminate') { require $resist_script; &eliminate; } &error ('どの作業をするのか判断できませんでした'); } # # 記事修正画面 # sub revision { local ($color,$sno,$sreno,$sdate,$sname,$ssub,$scom,$shandl,$sdore,$soe,$smail,$surl,$ssyu,$skaki,$sgazo,$sani_pw,$sc,$schk,$swi,$shi,$ssize,$swatch,$ssend,$sok,$shost,$spw); my ($flag,$uri,$mpt); open (READ,"$changefile"); while (<READ>) { ($sno,$sreno,$sdate,$sname,$ssub,$scom,$shandl,$sdore,$soe,$smail,$uri,$ssyu,$skaki,$sgazo,$sani_pw,$sc,$schk,$swi,$shi,$ssize,$swatch,$ssend,$sok,$shost,$spw) = split /<>/; if ($sreno == 0) { $color = $sc; } if ($renum == $sreno) { if ($admin) { $flag = 1; } else { my $pw = $sreno ?$sani_pw:$spw; !&decrypt ($FORM{'pwd'},$pw) && &error ('Passが違います'); if ($sdore >= 2) { $flag = ($ssyu >= $peatque) ?3:1; } else { &timezone; $flag = ($time - $skaki > $peattime * 60) ?2:1; } } last; } } close (READ); $flag || &error ('該当記事が見つかりませんでした'); $flag == 2 && &error ("修正が許可されているのは投稿後$peattime分間以内に限ります"); $flag == 3 && &error ("修正が許可されているのは投稿後$peatque回以内に限ります"); local $ppwd = $FORM{'pwd'}; local $hid = qq|<input type=hidden name=action value="$sno">\n<input type=hidden name=userpwd value="$ppwd">\n|; $surl = (split /"/,$uri)[1]; $surl =~ s|^http://||; $inyohead && $scom =~ s/(?:$inyohead|$inyofoot)//go; $scom =~ s/<br>/\n/g; $autolink && $scom =~ s/<\/?a[^>]*?>//g; $smail && $mailascii and &mail (\$smail); &type; print <<'JAVA'; function noSubmit(to) { to.comment.value = h2z(to.comment.value); to.sub.value = h2z(to.sub.value); } function noclick(to) { to.comment.value = h2z(to.comment.value); } JAVA &java_h2z; &bgc_ch (1,$sgazo); &header; &menu (5); print "<div align=center><br>\n"; if ($admin) { printf "管理者権限ではPass%s出来ません。<br>\n", $renum == 0 ?'・画像は修正(入れ替え)':'は修正'; } else { print "修正内容を問わず日付けの後に修正回数が表\示されます。<br>\n"; } if ($shandl) { print "この記事は$certifyされています。名前を修正すると取消されますので注意!<small>(Passの変更は無効)</small><br>\n"; } if ($renum) { local ($appear,$hide); local $no = $sreno; $kakusu = 1; &clr; print "<br><table border=0><tr>\n"; &resform; print "</tr></table><br>\n"; } else { if ($admin && $sdore) { print <<"HTML"; <br><form action="$script" method=POST> <table border=1 cellpadding=8 bgcolor="$f_ms_bc" bordercolor="$f_ms_li"><tr><td> <input type=hidden name=mode value="revision_edit"> <input type=hidden name=action value="$sno"> <input type=hidden name=userpwd value="$ppwd"> HTML printf qq|<input type=checkbox name=show value="1"%s> <b>非表\示設定にする</b>\n|, $schk == 1 ?' checked':''; print qq|<input type=submit value="変更する" class=ms>\n</td></tr></table></form>\n|; } elsif ($schk == 1) { print "<br><b>管理人が許可するまで画像は表\示されない設定となっております。ご了承下さい。</b><br>\n"; } my $g_s = int ($ssize / 1024).'KB'; if ($sgazo) { my ($w,$h) = ((split /,/,$swi)[0],(split /,/,$shi)[0]); print qq|<table border=0 cellpadding=20><tr><td id=bg><a href="$htmldir$image$sno$sgazo" target=_blank><img src="$htmldir$image$sno$sgazo" width=$w height=$h border=0 alt="$g_s"></a></td></tr></table><small>クリックで原寸表\示</small><br>\n|; } print "<hr width=600>修正したい箇所だけ変更して下さい。<br>\n"; if ($repaint && $sdore >= 2 && !$admin) { print <<"HTML"; <form action="$script" method=POST> <input type=hidden name=mode value="picture"> <input type=hidden name=paintno value="$sno"> <input type=hidden name=name value="$sname"> <input type=hidden name=pwd value="$ppwd"> <input type=hidden name=tateyoco value="$shi,$swi"> HTML if ($sdore >= 5) { $sdore -= 3; } if ($sdore >= 3) { printf qq|<input type=hidden name=shii value="%s">\n|, $sdore == 3 ?'std':'pro'; } if ($aptime) { my ($j,$t) = split (/,/,$swatch); printf qq|<input type=hidden name=%s value="%d">\n|, $t ?('jikan',$t):('notime',1); } print qq|<input type=hidden name=manga value="1">\n| if $sani_pw; print qq|<table border=1 cellpadding=8 bgcolor="$f_ms_bc" bordercolor="$f_ms_li"><tr><td align=center>\n|; print qq|<input type=submit value="絵画をリタッチする" style="cursor:pointer" class=ms>\n|; &hidden ($sani_pw,$sgazo,0,$sno,$g_s); } else { print "<br>\n"; } local $arts = ($reup && $sdore == 1) ?0:1; if (!$arts && !$admin) { print "新たな画像を入力すると差し替えられます。(空欄だと既存画像)<br> <br>\n"; $mpt = ' enctype="multipart/form-data"'; } if ($sani_pw && $animation == 3) { $hid .= "アニメ <input type=checkbox name=animedel> Animationの削除<br>\n"; } unless ($sdore) { $hanga = $kakikake = 0; } print "<table border=0><tr><td>\n"; &form ($mpt); print qq|<SCRIPT type="text/JavaScript">d.main.submit.value = "修正する";</script>\n|; print "</td></tr></table>\n"; } print "</div><hr size=1>\n"; &footer; exit; } # # selectかhidden # sub hidden { my ($a,$g,$do,$n,$s) = @_; if ($a) { my $a_s = int ((-s "$html_img_dir"."$image"."$n"."$a") / 1024); if ($animation == 1 || $animation == 3 and $do) { print <<'HTML'; <SCRIPT type="text/JavaScript"> <!-- function ch() { if (d.main.sion.selectedIndex) d.main.manga.checked = false; else d.main.manga.checked = true; } //--> </SCRIPT> <p><select name=sion class=ms onChange="ch()"> HTML } else { print "<p><select name=sion class=ms>\n"; } print <<"HTML"; <option value="$a">1、アニメを貼\り付ける ${a_s}KB <option value="$g">2、画像を貼\り付ける $s </select> <br><font size=1>1、レイヤーなどすべての情報を保持しています。<br>2、アニメを貼\り付けた時に不具合が出た方など。</font> HTML } else { print qq|<input type=hidden name=sion value="$g">\n|; } print "</td></tr></table>\n<table border=1 cellspacing=0 cellpadding=2><tr><td><small>"; if ($do && $a && $shipaint == 2) { printf "・アニメを貼\り付ける時は %s をChoiceして下さい。<br>\n", $do >= 3 ?'しぃペインター':'PaintBBS'; } if ($ENV{'HTTP_USER_AGENT'} =~ /MSIE[\d|\.|\s|;]+Windows/i && $g eq '.png') { print '・MS JavaVM環境下では「画像を貼り付ける」は不可。(IEブラウザ利用者に多い)<br> ⇒具体的には数分経ってもキャンバスに表示されなければ該当者ですので<br>   SunJavaVM環境下(JVMを切り替えるか他のブラウザを使用)に変更する'; } print "</small></td></tr></table>\n</form>\n"; } # # メール 符号 → 元 # sub mail { local *ml = shift; my $mail = ''; foreach (split /,/,$ml) { s/($_)/chr($1)/eg; $mail .= $_; } $ml = $mail; } # # エラー処理 # sub error { $_[1] eq 'LOCK' && &unlock; opendir (WRECK,"$sytm"); my @temp = grep (/\.(?:tmp|jpe)$/,readdir(WRECK)); closedir (WRECK); @wreckage = grep (/\.tmp$/,@temp); @wreck = grep (/\.jpe$/,@temp); if (defined @wreckage || defined @wreck) { &timezone; foreach (@wreckage) { ($time - (stat ("$sytm$_"))[9] > 60) && unlink ("$sytm$_"); } foreach (@wreck) { ($time - (stat ("$sytm$_"))[9] > 86400) && unlink ("$sytm$_"); } } &type; &header; print '<center><hr width=400><h3>- システムからお知らせ -</h3>'; print "<p><h4>$_[0]。</h4><p><hr width=400>\n"; unless ($imode) { print '<form><input type=button value="戻る" onClick="history.back();" class=ms></form>'; } print '</center></body></html>'; exit; } # # 出力形式 # sub type { print "Content-type: text/html; charset=euc-jp\n\n"; print <<"HTML"; <html lang="ja"> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp"> <META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <link rel="SHORTCUT ICON" href="/favicon.ico"> <link rel="stylesheet" type="text/css" href="/win.css"> <script type="text/JavaScript" language="JavaScript" src="/default.js"></script> <title>$title $title HTML print qq|\n| if $rssview; print "\n"; printf qq|\n|, $background ?qq| background="$background"|:''; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "top\n"; print "intro\n"; print "about\n"; print "graphics\n"; print "text\n"; print "NAICS\n"; print "unblogged\n"; print "paintbbs\n"; print "webnote\n"; print "links\n"; print "mail\n"; print "webclap 
\n"; print "
\"mezzo.jp\"
\"\"
\n"; print "\n"; } # # フッター (著作権表示に付き削除改変禁止) # sub footer { print qq|
\n
\n|; print qq|- Pallet Town|; print qq( | Shi-dow) if $pctart; print " -\n
\n

\n\n"; } # # 親入力チェックJavaScript # sub java_nosubmit { print <<'JAVA'; function noSubmit(to) { var set_name = to.name.value; var co = to.comment.value; if (set_name == "" || co == "") { alert("名前もしくはコメントの記入漏れです。"); return false; } JAVA if ($sjt) { print <<'JAVA'; var sub = to.sub.value; if (sub == "") { alert("タイトルは入力必須となっております。"); return false; } to.sub.value = h2z(sub); JAVA } print " to.comment.value = h2z(co);\n"; &java_cookie; } # # レス入力チェックJavaScript # sub java_noclick { print <<'JAVA'; function noclick(to) { var set_name = to.name.value; var co = to.comment.value; if (set_name == "" || co == "") { alert("名前もしくはコメントの記入漏れです。"); return false; } to.comment.value = h2z(co); JAVA &java_cookie; } # # Java Scriptクッキー発行 # sub java_cookie { print <<'JAVA'; var cook = ""; var set_expires = new Date(); set_expires.setTime(set_expires.getTime() + 30 * 86400000); set_name = escape(set_name); var set_mail = ''; var set_url = ''; if (set_url == "" || set_url == "http://") { set_url = ""; } else { set_url = escape(set_url.substring(7, set_url.length)); } var set_pwd = escape(to.pwd.value); if (set_name == "" && set_mail == "" && set_url == "" && set_pwd == "") { cook = "PALLET=DELETE; expires=Fri, 01 Jan 1999 00:00:00 GMT"; } else { cook = "PALLET=name:" + set_name + ",email:" + set_mail + ",url:" + set_url + ",pwd:" + set_pwd + ",; expires=" + set_expires.toGMTString(); } d.cookie = cook; return true; } JAVA &java_h2z; } # # Java Scriptクッキー分割・取得 # sub java_cookie_sp { print <<'JAVA'; function getCookie(id) { var ck = d.cookie + ";"; if (ck && (ck.indexOf(id, 0) >= 0)) { var cs = ck.indexOf(id + "=", 0) + 7; var ce = ck.indexOf(";", cs); return(ck.substring(cs, ce)); } return(null); } function setting(x) { if (!flag) { name_val = splt("name"); mail_val = splt("email"); url_val = "http://" + splt("url"); pw_val = splt("pwd"); flag = 1; } x.name.value = name_val; x.pwd.value = pw_val; } function splt(n) { n += ":"; var len = get_cook.indexOf(n, 0); var start = len + n.length; var end = get_cook.indexOf(",", len); if (start != end) { return(unescape(get_cook.substring(start, end))); } return(""); } JAVA } # # 半角カナ→全角カナ変換JavaScript # sub java_h2z { print <<'JAVA'; function h2z(val) { if (navigator.userAgent.indexOf("Win") < 0) return(val); var han = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョ"; var zen = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョ"; var str = ""; for (ii = 0; ii < val.length; ii++) { var h = val.charAt(ii); var t = han.indexOf(h, 0); if (t >= 0) h = zen.charAt(t); str += h; } return(str); } JAVA } # # Java Scriptクッキーセット # sub java_cookset { my ($cs1,$cs2,$cs3,$cs4) = @_; print qq|\n"; } # # お絵描き用入力チェックJavaScript # sub java_oekaki { print <<'JAVA'; function need(n,p) { if (n.value == "" || p.value == "") { alert("NameもしくはPassの記入漏れです。\n必ず入力する必要があります。"); return false; } return true; } JAVA } # # メールASCIIデコードJavaScript # sub java_mail { print <<'JAVA'; function mail() { var ad = "mailto:"; for (i = 0; i < arguments.length; i++) { ad += String.fromCharCode(arguments[i]); } return ad; } JAVA } # # 新着マーク表示Java Script # sub java_new { $new_time *= 3600; print <<"JAVA"; function NewMark(ti) { var check = ((new Date()).getTime() / 1000) - ti; if(check < $new_time) { d.write('$nmark'); } } JAVA } # # 背景色チェンジJava Script # sub bgc_ch { my ($b_ch,$b_nasi) = @_; print "function clr(x,y,z) {\n if (d.all) {\n"; if ($b_nasi) { printf " d.%s.style.backgroundColor = x;\n", $b_ch ?'all.bg':'main.image'; } print " d.main.comment.style.backgroundColor = y;\n d.main.comment.style.color = z;\n }\n}\n"; } # # JAVA APPLETが動くか?Java Script # sub java_ok { print <<'JAVA'; JAVA } # # コテハンチェック # sub name_check { my ($na,$pw,$ext) = @_; open (CTH,"$sytm$cotehan") || &error ('固定ハンドル管理ファイルが開きませんでした','LOCK'); @namelog = ; close (CTH); $cth_id = shift @namelog; my $ch; $ct_n = 0; foreach $ch (@namelog) { ($ct_no,$ct_na,$ct_dr,$ct_pw,$ct_ml,$ct_hp,$ct_da,$ct_oe,$ct_ip) = split (/<>/,$ch); if ($na eq $ct_na) { if (!&decrypt($pw,$ct_pw)) { &error ('コテハンに登録されている名前ですが、
パスワードが一致しませんでした','LOCK'); } else { $checker = 1; } last; } $ct_n++; } $ext || !$checker and return; return ($ct_ml,$ct_hp,$ct_pw); } # # RSS出力 # sub rss { local *threads = shift; my @order = split (/,/,$threads); if ($res_top && $rsstop) { @order = sort{$b <=> $a}@order; } @order = @order[0..$rssview-1]; my $scripturi = $scriptdir eq './' ?$htmlurl:$scriptdir; my ($number,$items_seq,$item_val); my $lasttime = 0; foreach $number (@order) { if (open IN,"$dir$number$extension") { my ($no,$name,$subject,$comment,$dore) = (split /<>/,)[0,3..5,7]; close (IN); my $url_address = $scripturi.$script.'?mode=preview&no='.$no; my $hikaku = (stat "$dir$number$extension")[9]; my $jikan = &w3c_time ($hikaku); $lasttime = $hikaku > $lasttime ?$hikaku:$lasttime; $autolink && $comment =~ s|]*?>||g; my $alltab = (length $comment) - (($comment =~ s/
/<>/g) * 4); my $br; my $moji500 = 0; my @newcom = (); foreach $br (split /<>/,$comment) { $br eq '' && next; $moji500 += length $br; push (@newcom,$br); $moji500 >= $rssmoji && last; } $comment = join (' ',@newcom); $alltab > $moji500 and $comment .= '...'; if ($subject =~ m|^[^<]+$|) { $subject = '削除されました。'; } $dore = $dore > 2 ?2:$dore; $dore = $postman[$dore]; my $amp; foreach $amp ($subject,$name,$comment,$dore) { $amp =~ s/<//g; $amp =~ s/<[^>]+?>//g; # <>で囲まれたものはすべて削除するように変更 (弊害あり) $amp =~ s/"/"/g; $amp =~ s/&/&/g; # $amp =~ s/"/"/g; $amp =~ s//>/g; } $items_seq .= qq| \n|; $item_val .= <<"_RSS_"; $subject $url_address $comment $name $dore $jikan _RSS_ } } my $encodeflag = 'UTF-8'; eval "use Jcode;"; # use Encodeでは判定失敗時500エラーが出る if ($@) { $encodeflag = 'euc'; } if ($encodeflag eq 'UTF-8') { my $val; foreach $val ($item_val,$rssadmin,$rsstitle,$rssexplanation,$title) { Jcode::convert(\$val,'utf8','euc'); } } $lasttime = &w3c_time ($lasttime); my $rssimagech = ''; my $rssimagefld = ''; if ($rssimage) { $rssimagech = qq|\n |; $rssimagefld = <<"_RSS_"; $title $htmlurl$script $rssimage _RSS_ } my $rssprint = <<"_RSS_"; $rsstitle $htmlurl$htmlfile $rssexplanation ja $rssadmin $lasttime $rssimagech $items_seq $rssimagefld $item_val _RSS_ open (RDF,">$html_img_dir$rssfile") || &error ('RDFファイルの作成に失敗しました','LOCK'); print RDF $rssprint; close (RDF); } # # RSS用 W3C Date and Time Formats (W3CDTF) # sub w3c_time { my $n = shift; my ($sec,$min,$hour,$day,$mon,$year) = localtime ($n); return sprintf ("%04d-%02d-%02dT%02d:%02d:%02d+09:00", $year+1900,$mon+1,$day,$hour,$min,$sec); }