#!/usr/bin/perl -w # -*-perl-*- # Last updated: <2024/06/09 10:28:00 +0900> # # opg.cgi means Ore Power Gold # # 2024/06/09 ver 0.1.3.1 # 2000/9/14 ver 0.1.3 # # やあ3のパワーを表すcgi # text表示用 use strict; use warnings; my ( @a, @b, @c, @s ); my ( @wsize, @wcount ); ######################################################## #default value set # my $ver = "0.1.3 2000/9/18"; my $ver = "0.1.3.1 2024/06/09"; # set diary files directory my $diarydir = "diary"; if ( $^O eq "MSWin32" ) { # Windows $diarydir = "D:/home/diary/diary/"; } elsif ( $^O eq "linux" ) { # Linux $diarydir = "/home/mieki256/diary/"; } my $author = "mieki256"; my $max = 90; # 日数 my $width = 60; # width of graph my $HNS = 0; my $TDS = 1; my $sys = $HNS; # 日記システムの選択 my $lang = 1; # 0: Japanese / 1: English my $back_uri = "./"; # URL for back my $ref_uri = "./"; # URL for refer-diary my $weekstat = 1; # week summary ######################################################## my $jisa = 0; #設定ファイルの読み込み require "./opg.ph" if ( -e "./opg.ph" ); # 今日を取得 my $tt = time + $jisa * 3600; my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime($tt); $year += 1900; $mon++; my $startdate = sprintf( "%04d%02d%02d", $year, $mon, $mday ); my $startdotw = $wday; # 今日の曜日 my $enddate = 0; # print "$startdate $startdotw\n"; my (@week); if ( $lang == 0 ) { # default=0: japanese #日本語 @week = ( "日", "月", "火", "水", "木", "金", "土" ); } else { #English @week = ( "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ); } #他の言語に対応する場合はここらへんをアレせよ # days of months my @dom = ( 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); ######################################################## #引数の解釈 masato-3 from i system my ($query_string); if ( $ARGV[0] eq '-t' ) { # デバック用オプション引数を使った実行 # 使用例 : ./index.cgi -t word=system $query_string = $ARGV[1]; splice( @ARGV, 0, 2 ); # オプション引数を除去 } elsif ( $ENV{'REQUEST_METHOD'} eq "POST" ) { read( STDIN, $query_string, $ENV{'CONTENT_LENGTH'} ); } else { $query_string = $ENV{'QUERY_STRING'}; } my %FORM; my @x = split( /&/, $query_string ); foreach my $x (@x) { my ( $name, $value ) = split( /=/, $x ); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $FORM{$name} = $value; } ######################################################## #引数の適用 $max = $FORM{'max'} if ( $FORM{'max'} ); # max=100 if ( $FORM{'startdate'} ) { $startdate = $FORM{'startdate'}; # startdate=20000914 ここから日数分さかのぼる my ( $y, $m, $d ) = ( $startdate =~ /(\d{4})(\d{2})(\d{2})/ ); $startdotw = &get_dow( $y, $m, $d ); } my ($mrep); if ( $FORM{'mrep'} ) { $mrep = $FORM{'mrep'}; # mrep=200009 monthly report $mrep =~ /(\d{4})(\d{2})/; $startdate = "$1$2" . $dom[$2]; # 20000931 とする my ( $y, $m, $d ) = ( $startdate =~ /(\d{4})(\d{2})(\d{2})/ ); $startdotw = &get_dow( $y, $m, $d ); $enddate = "$1$2" . "01"; } &makefilelist; my ( $maxday, @size ); my $maxsize = 0; #maximum size of hnf my $sum = 0; # 合計 for ( my $i = 0; $i < $max; $i++ ) { my $t = ( stat( $a[$i] ) )[7]; # size get if ( $t > $maxsize ) { $maxsize = $t; $maxday = $i; } #push(@s, $t); # 配列に格納 $size[$i] = $t; $sum += $t; } print "content-type: text/html\n"; print "charset: euc-jp\n\n"; &printhead; &printform; &printdata; &printfoot; # end; exit; sub printdata { if ( $maxsize == 0 ) { print "no diary\n"; return; } my $w = $startdotw; print "
"; print " day : size : bar\n"; for ( my $i = 0; $i < $max; $i++ ) { print ""; print "$b[$i]($week[$w]):"; my $buf = sprintf( "%06d", $size[$i] ); print "$buf:"; if ( $i == $maxday ) { print ""; } for ( my $j = 0; $j < $size[$i] * $width / $maxsize; $j++ ) { print "*"; } if ( $i == $maxday ) { print ""; } print "\n"; $wcount[$w]++; $wsize[$w] += $size[$i]; $w--; if ( $w < 0 ) { $w = 6; } } print "\n"; print "Max. day is "; print "$b[$maxday]: $size[$maxday]
\n"; for ( my $i = 0; $i < 7; $i++ ) { print "$week[$i]:" . sprintf( "%8d:", $wsize[$i] ); if ( $i == $wmax ) { print ""; } for ( my $j = 0; $j < $wsize[$i] * $width / $wmaxsize; $j++ ) { print "@"; } if ( $i == $wmax ) { print ""; } print "\n"; } print "\n"; } sub printform { #フォームを表示 my $mrep; $startdate =~ /(\d{6}).*/; $mrep = $1; print <
version $ver
diary directory : $diarydir
Ore Power Gold is made by yar-3(ore\@yar-3.net) and OPG supporters.