/[suikacvs]/webroot/sccc/board-t/test/pageview.cgi
Suika

Contents of /webroot/sccc/board-t/test/pageview.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Wed Jan 12 04:23:01 2005 UTC (20 years, 3 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
New

1 wakaba 1.1 #!/usr/local/bin/perl
2    
3     use strict;
4     require 'jcode.pl';
5    
6     ### pageview.cgi ver 2.04 (2001/07/10)
7    
8    
9     #べーじびゅー!
10    
11     #==================================================
12     # システム関連(タイムゾーン・シグナル)
13     #==================================================
14    
15     #タイムゾーンをセットする
16     {
17     $ENV{'TZ'} = "JST-9";
18     }
19    
20     #シグナル対処関数
21     sub SigExit {
22     exit(0);
23     }
24    
25     #対応シグナル
26     {
27     $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "SigExit";
28     }
29    
30    
31     #==================================================
32     # 初期情報の取得(POST)
33     #==================================================
34    
35     {
36     use vars qw(%FORM);
37     my ($buffer, @pairs, $name, $value);
38     if($ENV{'REQUEST_METHOD'} eq 'POST'){
39     read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
40     }else{
41     $buffer = $ENV{'QUERY_STRING'};
42     }
43    
44     @pairs = split(/&/,$buffer);
45     foreach (@pairs) {
46     ($name, $value) = split /=/;
47     $value =~ tr/+/ /;
48     $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg;
49     $FORM{$name} = $value;
50     }
51     }
52    
53    
54     #==================================================
55     # 設定
56     #==================================================
57    
58     {
59     # 各種PATH生成
60     use vars qw(%SETTING);
61     use vars qw($WWWPATH);
62     use vars qw($PATH);
63     use vars qw($DATPATH);
64     use vars qw($TEMPPATH);
65     use vars qw($IMODEPATH);
66     use vars qw($npf);
67     $PATH = "../" . $FORM{'bbs'} . "/";
68     $DATPATH = $PATH . "dat/";
69     $TEMPPATH = $PATH . "html/";
70     $IMODEPATH = $PATH . "i/";
71    
72     use vars qw($NOWTIME);
73     $NOWTIME = time;
74     }
75    
76    
77     #==================================================
78     # 初期情報の取得(設定ファイル)
79     #==================================================
80    
81     #設定ファイルを読む
82     {
83     # 設定ファイルを読む
84     my ($m_pass,$m_key,$m_value);
85     $m_pass = $PATH . "SETTING.TXT";
86     if(-e $m_pass){
87     open(FILE,$m_pass);
88     foreach (<FILE>){
89     chop;
90     ($m_key,$m_value) = split /=/;
91     $SETTING{$m_key} = $m_value;
92     }
93     close(FILE);
94     }else{
95     #設定ファイルがない(ERROR)
96     DispError("ERROR!","ユーザー設定が消失しています!$m_pass");
97     }
98    
99    
100     # 欠落情報の補完
101     unless($SETTING{'BBS_THREAD_NUMBER'}){$SETTING{'BBS_THREAD_NUMBER'}=20;}
102     unless($SETTING{'BBS_CONTENTS_NUMBER'}){$SETTING{'BBS_CONTENTS_NUMBER'}=10;}
103     unless($SETTING{'BBS_LINE_NUMBER'}){$SETTING{'BBS_LINE_NUMBER'} = 30;}
104     unless($SETTING{'BBS_MAX_MENU_THREAD'}){$SETTING{'BBS_MAX_MENU_THREAD'}=100;}
105     unless($SETTING{'BBS_BG_COLOR'}){$SETTING{'BBS_BG_COLOR'}="#FFFFFF";}
106     unless($SETTING{'BBS_MENU_COLOR'}){$SETTING{'BBS_MENU_COLOR'}="#CCFFCC";}
107     unless($SETTING{'BBS_MAKETHREAD_COLOR'}){$SETTING{'BBS_MAKETHREAD_COLOR'}="#CCFFCC";}
108     unless($SETTING{'BBS_THREAD_COLOR'}){$SETTING{'BBS_THREAD_COLOR'}="#EFEFEF";}
109     unless($SETTING{'BBS_SUBJECT_COLOR'}){$SETTING{'BBS_SUBJECT_COLOR'}="#FF0000";}
110     unless($SETTING{'BBS_TEXT_COLOR'}){$SETTING{'BBS_TEXT_COLOR'}="#000000";}
111     unless($SETTING{'BBS_NAME_COLOR'}){$SETTING{'BBS_NAME_COLOR'}="#008800";}
112     unless($SETTING{'BBS_LINK_COLOR'}){$SETTING{'BBS_LINK_COLOR'}="#0000FF";}
113     unless($SETTING{'BBS_ALINK_COLOR'}){$SETTING{'BBS_ALINK_COLOR'}="#FF0000";}
114     unless($SETTING{'BBS_VLINK_COLOR'}){$SETTING{'BBS_VLINK_COLOR'}="#660099";}
115     unless($SETTING{'BBS_TITLE_COLOR'}){$SETTING{'BBS_TITLE_COLOR'}="#000000";}
116     }
117    
118    
119     #==================================================
120     # ファイル操作(サブジェクトファイル読み込み)
121     #==================================================
122    
123     {
124     my $subject = $PATH . "subject.txt";
125     use vars qw(@PAGEFILE);
126     use vars qw(%SUBJECT);
127     use vars qw($FILENUM);
128    
129     my ($file, $value,$filename);
130     # サブジェクトファイルを読み込む
131     open(SUBR,"<$subject");
132     foreach(<SUBR>){
133     chop;
134     ($file, $value) = split /<>/;
135     unless($file){next;}
136     $filename = $DATPATH . $file;
137     if(-e $filename){ # datが存在する場合順番に追加
138     push(@PAGEFILE,$file);
139     $SUBJECT{$file} = $value;
140     }
141     }
142     close(SUBR);
143     # サブジェクト数を取得
144     $FILENUM=@PAGEFILE;
145     #パーミッション調整
146     chmod(0666,$subject);
147     }
148    
149     #==================================================
150     # もしページが1ならトップに戻す
151     #==================================================
152    
153     {
154     my $lp=int($FILENUM / $SETTING{"BBS_THREAD_NUMBER"});
155     if($FILENUM != $lp * $SETTING{"BBS_THREAD_NUMBER"}){
156     $lp++;
157     }
158    
159     if($FORM{'page'} eq '' || $FORM{'page'} > $lp || $FORM{'page'} == 1 && $FORM{'imode'} ne 'true'){
160     $PATH .= "index.html";
161     if ($SETTING{'BBS_LOCATION_CHECK'} eq 'checked') {
162     print "Location: $PATH \n\n";
163     } else {
164     print "Content-Type: text/html; charset=shift_jis\n\n";
165     print <<EOF;
166     <html><head>
167     <title>移動中</title>
168     <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
169     <META content=0;URL=$PATH http-equiv=refresh></head>
170     <body bgcolor=#EEEEEE>
171     移動中
172     </body></html>
173     EOF
174     }
175     exit;
176     }
177    
178     if($FORM{'page'} =~/\D/ || $FORM{'page'} <= 0){DispError("ERROR!","ページ指定が不正です! ")}
179    
180     }
181    
182    
183     #==================================================
184     # i-mode
185     #==================================================
186    
187     {
188     if($FORM{'imode'} eq 'true'){
189     # 一括書き込み
190     print "Content-type: text/html\n\n";
191     print "<HTML>\n";
192     print "<HEAD>\n";
193     print "<TITLE>$SETTING{'BBS_TITLE'}</TITLE>\n";
194     print "</HEAD>\n";
195     print "おんぷちゃんねる i-mode <a href=\"../../../../i/\">トップ</a><hr>";
196     print "$SETTING{'BBS_TITLE'} : page $FORM{'page'}<hr>";
197    
198     my ($count,$key,$top,$end,$subtitle);
199     $top = (($FORM{'page'}-1)*30)+1;
200     $end = $top+30;
201     if($end>$FILENUM){$end=$FILENUM+1;}
202    
203     for($count=$top;$count<$end;$count++){
204     @PAGEFILE[$count-1]=~ /(\d*)\.dat/;
205     $key = $1;
206     $subtitle = $SUBJECT{@PAGEFILE[$count-1]};
207     &jcode::z2h_sjis(\$subtitle);
208     print "$count: <a href=\"../test/read.cgi?bbs=$FORM{'bbs'}&key=$key&imode=true\">$subtitle</a><br>";
209     }
210     $count=@PAGEFILE;
211     my $nextpage = $FORM{'page'} + 1;
212     my $prevpage = $FORM{'page'} - 1;
213     print "<hr>";
214     if ($end < $FILENUM){
215     print "<a href=\"../test/pageview.cgi?bbs=$FORM{'bbs'}&page=$nextpage&imode=true\">次</a> ";
216     }
217     if ($top > 30){
218     print "<a href=\"../test/pageview.cgi?bbs=$FORM{'bbs'}&page=$prevpage&imode=true\">前</a> ";
219     }
220     print "<a href=\"../$FORM{'bbs'}/i/index.html\">最初</a>\n";
221     print "<hr></BODY></HTML>\n";
222     exit;
223     }
224     }
225    
226    
227     #==================================================
228     # 本HTML吐き処理
229     #==================================================
230    
231     {
232     print "Content-type: text/html\n\n";
233     print <<EOF;
234     <HTML>
235     <HEAD>
236     <meta http-equiv=Content-Type content=text/html; charset=Shift_JIS>
237     <META HTTP-EQUIV="pragma" CONTENT="no-cache">
238     <SCRIPT LANGUAGE="JavaScript">
239     <!--
240     Name = getCookie("NAME");
241     Mail = getCookie("MAIL");
242     function getCookie(key, tmp1, tmp2, xx1, xx2, xx3) {
243     tmp1 = " " + document.cookie + ";";
244     xx1 = xx2 = 0;
245     len = tmp1.length;
246     while (xx1 < len) {
247     xx2 = tmp1.indexOf(";", xx1);
248     tmp2 = tmp1.substring(xx1 + 1, xx2);
249     xx3 = tmp2.indexOf("=");
250     if (tmp2.substring(0, xx3) == key) {
251     return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1)));
252     }
253     xx1 = xx2 + 1;
254     }
255     return("");
256     }
257     // -->
258     </SCRIPT>
259     <TITLE>$SETTING{'BBS_TITLE'}</TITLE>
260     </HEAD>
261     <BODY TEXT="$SETTING{'BBS_TEXT_COLOR'}" BGCOLOR="$SETTING{'BBS_BG_COLOR'}" link="$SETTING{'BBS_LINK_COLOR'}" alink="$SETTING{'BBS_ALINK_COLOR'}" vlink="$SETTING{'BBS_VLINK_COLOR'}" background="$SETTING{'BBS_BG_PICTURE'}">
262     EOF
263    
264     if($SETTING{'BBS_TITLE_PICTURE'}){
265     print "<div align=center>";
266     if($SETTING{'BBS_TITLE_LINK'}){ print "<a href=\"$SETTING{'BBS_TITLE_LINK'}\" border=0>"; }
267     print "<img src=\"$SETTING{'BBS_TITLE_PICTURE'}\" border=0>";
268     if($SETTING{'BBS_TITLE_LINK'}){ print "</a>"; }
269     print "</div>";
270     }else{
271     print "<div align=center>";
272     if($SETTING{'BBS_TITLE_LINK'}){ print "<a href=\"$SETTING{'BBS_TITLE_LINK'}\" border=0>"; }
273     # print "<FONT COLOR=\"$SETTING{'BBS_TITLE_COLOR'}\"><H1>$SETTING{'BBS_TITLE'}</H1></FONT>";
274     if($SETTING{'BBS_TITLE_LINK'}){ print "</a>"; }
275     print "</div>";
276     }
277    
278     print "\n";
279     print<<EOF;
280     <table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor="$SETTING{'BBS_MAKETHREAD_COLOR'}" align=center><tr><td align="center">
281     <form method=POST action="../test/bbs.cgi">
282     <TABLE BORDER="0" CELLPADDING="1" WIDTH="100%">
283     <TR><TD nowrap COLSPAN="2">
284     <font size=+1><b>$SETTING{'BBS_TITLE'}</b></font><br>
285     EOF
286     if ($SETTING{'BBS_PROXY_CHECK'} eq "checked") {
287     print " <font color=#FF0000>■PROXY規制中■</font><br>\n";
288     }
289     print " </TD>\n";
290     print " <TD width=10% ALIGN=\"right\">";
291     &HTM("../right.txt");
292     print<<EOF;
293     </TD>
294     <TD nowrap width=5% ALIGN="right" VALIGN="top"><a href="#menu">■</a> <a href="#1">▼</a></TD>
295     </TR>
296     <TR><TD COLSPAN="3">
297     EOF
298     &HTM($PATH."head.txt");
299    
300     print<<EOF;
301     <br><font color=red>この板の1スレッドの制限は最大$SETTING{'BBS_MAX_RES_COUNT'}レス、または最大$SETTING{'BBS_MAX_RES_SIZE'}KBになっています。</font><br>
302     EOF
303    
304     print " <br></TD></TR>\n";
305    
306     if ($SETTING{'BBS_PASSWORD_CHECK'} ne "checked"){
307     print<<EOF;
308     <TR>
309     <TD nowrap ALIGN="right">タイトル:</TD>
310     <TD COLSPAN="2"><input type="text" name="subject" size="40"> <input type=submit value="新規スレッド作成" name="submit"></TD>
311     </TR><TR>
312     <TD nowrap ALIGN="right">名前:</TD>
313     <TD>
314     <SCRIPT Language="JavaScript">
315     <!--
316     document.write("<INPUT TYPE=text NAME=FROM SIZE=20 VALUE=");
317     document.write(Name, ">");
318     // -->
319     </SCRIPT>
320     <NOSCRIPT>
321     <INPUT TYPE=text NAME=FROM SIZE=20>
322     </NOSCRIPT>
323     </TD>
324     <TD nowrap width=45%>E-mail<font size="1">(省略可)</font>:
325     <SCRIPT Language="JavaScript">
326     <!--
327     document.write("<INPUT TYPE=text NAME=mail SIZE=20 VALUE=");
328     document.write(Mail, ">");
329     // -->
330     </SCRIPT>
331     <NOSCRIPT>
332     <INPUT TYPE=text NAME=mail SIZE=20>
333     </NOSCRIPT>
334     </TD>
335     <TD><br></TD></TR><TR>
336     <TD nowrap ALIGN="right" VALIGN="top">内容:</TD>
337     <TD COLSPAN="2">
338     <textarea rows=5 cols=60 wrap=OFF name=MESSAGE></textarea>
339     <input type=hidden name=bbs value=$FORM{'bbs'}>
340     <input type=hidden name=time value=$NOWTIME>
341     </TD></TR></TABLE>
342     EOF
343     }else{
344     print<<EOF;
345     <TD nowrap COLSPAN="5" ALIGN="center">
346     <input type=submit value="新規スレッド作成画面へ" name="submit">
347     <input type=hidden name=bbs value=$FORM{'bbs'}>
348     <input type=hidden name=time value=$NOWTIME>
349     </TD></TR></TABLE>
350     EOF
351     }
352    
353     &HTM("../bottom.txt");
354     print "\n</form>\n";
355    
356     $npf=0;
357     my $PAGE = $FORM{'page'};
358     my $frontpage=$PAGE-1;
359     if($frontpage>=1){
360     print "<a href=\"./pageview.cgi?page=$frontpage&bbs=$FORM{'bbs'}\">前のページ</a>";
361     }else{
362     my $lp=int($FILENUM / $SETTING{"BBS_THREAD_NUMBER"});
363     if($FILENUM != $lp * $SETTING{"BBS_THREAD_NUMBER"}){
364     $lp++;
365     }
366     print " <a href=\"./pageview.cgi?page=$lp&bbs=$FORM{'bbs'}\">最後のページ</a>";
367     }
368    
369     my $nextpage=$PAGE+1;
370     if($FILENUM>$PAGE*$SETTING{"BBS_THREAD_NUMBER"}){
371     $npf=1;
372     print " <a href=\"./pageview.cgi?page=$nextpage&bbs=$FORM{'bbs'}\">次のページ</a>";
373     }else{
374     print " <a href=\"./pageview.cgi?page=1&bbs=$FORM{'bbs'}\">最初のページ</a>";
375     }
376     print " <a href=\"../$FORM{'bbs'}/subback.html\">過去ログ</a>";
377    
378     print " <a href=\"../$FORM{'bbs'}/i/index.html\">i-mode</a>";
379     print " <a href=\"http://www.2ch.net/guide/faq.html\">FAQ</a>";
380     print " <a href=\"../$FORM{'bbs'}/index.html\">リロード</a></td>\n";
381    
382     $PAGE--;
383     if($PAGE<0){
384     $PAGE=0;
385     }
386    
387     print <<EOF;
388     </td></tr></table><br>
389     <a name="menu"></a>
390     <table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor="$SETTING{"BBS_MENU_COLOR"}"align=center>
391     <tr><td><font size=2>
392     EOF
393    
394     my $TOPFILE = $PAGE * $SETTING{"BBS_THREAD_NUMBER"};
395     my $ENDFILE = $TOPFILE+$SETTING{"BBS_MAX_MENU_THREAD"};
396    
397     if($ENDFILE>$FILENUM){
398     $ENDFILE=$FILENUM;
399     }
400    
401    
402     #スレッド一覧を吐き出す
403     my($count,$key,$dat,$subtemp);
404     for($count=$TOPFILE+1;$count<=$ENDFILE;$count++){
405     $dat = $key = $PAGEFILE[$count-1];
406     $key =~ /(.+)\.dat/;
407     $key = $1;
408     unless($1){next;}
409     my $subtemp = $SUBJECT{$dat};
410     if($SETTING{"BBS_THREAD_NUMBER"} > $count - $TOPFILE-1){
411     print "<a href=\"../test/read.cgi?bbs=$FORM{'bbs'}&key=$key\" target=\"body\">$count</a> : <a href=\"#$count\">$subtemp</a> \n";
412     }else{
413     print "<a href=\"../test/read.cgi?bbs=$FORM{'bbs'}&key=$key\" target=\"body\">$count : $subtemp</a> \n";
414     }
415     }
416     print "\n";
417     print "<div align=\"right\"><a href=\"../$FORM{'bbs'}/subback.html\"><b>過去ログはこちら</b></a></font>\n";
418     print "</td></tr></table><br>\n";
419     my $headad = "../headad.txt";
420     if(-e $headad){
421     open(IN, "$headad");
422     my @headad = <IN>;
423     close(IN);
424     if (@headad){
425     print "<table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor=\"$SETTING{'BBS_MENU_COLOR'}\"align=center><tr><td>\n";
426     foreach(@headad){print}
427     print "</td></tr></table><br>\n";
428     }
429     }
430     &HTM("../headad2.txt");
431    
432     $ENDFILE = $TOPFILE+$SETTING{"BBS_THREAD_NUMBER"};
433     if($ENDFILE>$FILENUM){
434     $ENDFILE=$FILENUM;
435     }
436    
437     ### スレッドを吐き出す
438     my ($front, $next, $ancnum, $dap, $first, $line);
439     for(my $contnum = $TOPFILE;$contnum < $ENDFILE;$contnum++){
440     $front=$contnum;
441     $next=$contnum+2;
442     if($front==$TOPFILE){$front=$ENDFILE;}
443     if($next>$ENDFILE){$next=$TOPFILE+1;}
444     $ancnum=$contnum+1;
445     $dap = $PAGEFILE[$contnum];
446     $dap =~ s/([^\.]*)\.dat/$1/;
447     print "\n";
448     open(IN, "$TEMPPATH$dap.html");
449     $first=<IN>;
450     $first =~ s/\$ANCOR/$ancnum/g;
451     $first =~ s/\$FRONT/$front/g;
452     $first =~ s/\$NEXT/$next/g;
453     print $first;
454     print while <IN>;
455     close(IN);
456     print <<EOF;
457     <input type=hidden name=time value=$NOWTIME>
458     <b>
459     <a href="../test/read.cgi/$FORM{'bbs'}/$dap/">レスを全部読む</a>
460     <a href="../test/read.cgi/$FORM{'bbs'}/$dap/l50">最新レス50</a>
461     <a href="../test/read.cgi/$FORM{'bbs'}/$dap/-100">レス1-100</a>
462     <a href="#menu">掲示板のトップへ</a> <a href="../$FORM{'bbs'}/./index.html">リロード</a>
463     </b></form></DL></td></tr></table></TD></TR></DL></TABLE><br>
464     EOF
465    
466     }
467    
468     $FORM{'page'}=$FORM{'page'}+1;
469    
470     if($npf){
471     print <<EOF;
472     <table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor="$SETTING{'BBS_MENU_COLOR'}"align=center>
473     <tr><td align=center>
474     <a href="../test/pageview.cgi?page=$FORM{'page'}&bbs=$FORM{'bbs'}"><font size=5><b>次のページ</b></font></a>
475     </td></tr>
476     </table>
477     EOF
478     }
479    
480     print "<table border=0 align=center><tr><td><center>";
481    
482     print "<br><br>";
483    
484     &HTM("../bottom_ad.txt");
485    
486     print "\n";
487     print "</center></tr></td></table></body></html>";
488    
489    
490     exit;
491     }
492    
493     sub HTM {
494     my ($file,$h) = @_;
495     if($h){select(HTM);}
496     if(-e $file){
497     open(IN, "$file");
498     print while <IN>;close(IN);
499     }
500     if($h){select(STDOUT);}
501     }
502     #ロケーションジャンプ(エラー処理)
503     sub LocationJump{
504     print "Location: http://2ch.net/ \n\n";
505     exit;
506     }
507    
508     #エラー画面(エラー処理)
509     #DispError(TITLE,TOPIC);
510     sub DispError{
511     my $title=$_[0];
512     my $topic=$_[1];
513     print "Content-type: text/html; charset=shift_jis\n\n";
514     #-----------------------------------------------------------------------
515     print <<EOF;
516     <html>
517     <head>
518     <title>$title</title>
519     <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
520     </head>
521     <body bgcolor="#FFFFFF">
522     <font size=+1 color=#FF0000><b>$topic</b></font>
523     <center>こちらでリロードしてください。<a href="../$FORM{'bbs'}/index.html"> GO! </a><br>
524    
525    
526     </body>
527     </html>
528     EOF
529     #-----------------------------------------------------------------------
530     exit;
531     }

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24