#!/usr/local/bin/perl

# --------------------------------------------------------------------------------
# CGIカウンタ v1.0
#
# 更新履歴
# 2000/12/04	v1.0	完成
# ---------------------------------------------------------------------------------

# ---- 初期設定 ----
require './gifcat.pl';

$counter = "count.dat";	# カウンタファイル

$lockfile = "count.lock";

$keta = 6;		# 表示桁数
# ---- 初期設定 終わり----

# ファイルロック
&lock;

if(-e $counter){	# カウンタファイルを読み込む
	open(IN,"$counter");
	$count = <IN>;
	close(IN);
}else{			# カウンタファイルが存在していない場合0に初期化
	open(OUT,">$counter");
	$count = 0;
	print OUT $count;
	close(OUT);
}

# カウントアップ
$count++;

open(OUT,">$counter");
print OUT $count;
close(OUT);

# ファイルロック解除
&unlock;

while (length($count) < $keta) { $count = '0' . $count; }

$length = length($count);
@gif_list=();
foreach (0 .. $length-1) {
	$n = substr($count,$_,1);
	push(@gif_list,"gif/$n\.gif");
}

print "Content-type: image/gif\n\n";
binmode(STDOUT);
print &gifcat'gifcat(@gif_list);

exit;

#----------------------------
#  ファイルロック処理
#----------------------------
sub lock {
	local($retry) = 0;
	foreach (1 .. 5) {
		if (-e $lockfile) { sleep(1); }
		else {
			open(OUT,">$lockfile") || &error;
			close(OUT);
			$retry = 1;
			last;
		}
	}
	if (!$retry) { &error; }
}

#----------------------------
#  ファイルロック処理
#----------------------------
sub unlock {
	# ロック解除
	if (-e $lockfile) { unlink($lockfile); }
}

#----------------------------
#  エラー処理
#----------------------------
sub error {
	local($msg) = @_;
	if (-e $lockfile) { unlink($lockfile); }
	exit;
}
