/[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 - (show annotations) (download)
Wed Jan 12 04:23:01 2005 UTC (20 years, 3 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
New

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