#!/usr/bin/perl

# Filename: gcount.pl.cgi [Rev:1.00]
# Programming by GONTA
# UPDATE BY KFC@HOU 1999.10.26
# UPDATE BY KFC@PIP 2000.01.28
# UPDATE BY KFC@TAM 2001.05.15

$FileName="count/count";               # カウントファイル
$FileName="../count/count";               # カウントファイル
$lock_file1 = "count/lockfile";        # ロックファイル
$lock_file1 = "../count/lockfile";        # ロックファイル
# 上2つのファイル及びディレクトリには書き込み権を付加すること
$num_retry  = 5;                       # 再試行最大回数
$retry_time = 1;                       # Busy時待ち時間( sec )
$expire     = 300;                     # 最大排他制御時間( sec )
$gifdir     = "cgi-bin/";              # 数値GIFファイルのあるディレクトリ added
$gifdir     = "../cgi-bin/";              # 数値GIFファイルのあるディレクトリ added
@CmdLine=split(//,$ENV{'QUERY_STRING'});
if (@CmdLine[1] eq "+"){

    #$lock_file1 ディレクトリの正当性をチェックする
    if(-d $lock_file1 && (time()-(stat($lock_file1))[9])>$expire){
        rmdir($lock_file1);
    }

    #$lock_file1 ディレクトリを作成する
    for($retry=$num_retry; $retry>0 && mkdir("$lock_file1",0755)!=1; $retry--){
        sleep($retry_time); # ある場合は時間待ち
    }

    if($retry>0){ # 成功したか

        open(fp,"$FileName");
        $count=<fp>;
        close(fp);
        $count++;
        open(fp,">$FileName");
        print fp $count;
        close(fp);
        rmdir("$lock_file1"); # 排他制御を解除する
    }

}

open(fp,"$FileName");
$count=<fp>;
close(fp);

$figure=length($count);
$GIF_Name=$gifdir;
if ($CmdLine[0] gt $figure){
        $GIF_Name.="0.gif";
}
else{
        $GIF_Name.=substr($count,$CmdLine[0]*-1,1);
        $GIF_Name.=".gif";
}

print "Content-type: image/gif\n\n";
open(fp,"$GIF_Name");
while(<fp>){
print;
}
close(fp);