#!/usr/bin/perl
#プロバイダによって設定してね。

#-------------------------------

#Counter-Script#2 ver 0.02
#Copyright (C) 1997 Nobutaka Makino All rights reserved.
#  e-mail nobu@imaginet.ne.jp   Last Update 7 Dec..

#基本設定（普通は変更の必要なし）
#-------------------------------

$DataFile = './count.dat';
#データファイルのパス指定。

$ImageDir[0] = 'img/';


#GIFファイルのあるディレクトリのパス指定。
#必ず最後は"/"でおわっていること。

require './gifcat.pl';
#gifcat.plのパス指定。

#$ImageDir[2] = 'img2/';
#$ImageDir[3] = 'img3/';


#２種以上の画像ファイルを使用する場合、
#$の前の#を消して、GIF画像のあるディレクトリパスを指定。



#改造したい人以外は、
#ここから下はさわらないでね。
#-------------------------------

$buffer = $ENV{QUERY_STRING};				#オプションの取得。
$buffer =~ s/\&amp\;/\&/ig;					#&→&amp;書き換え対処。

foreach(split(/&/,$buffer)){				#オプションを変数に代入。
 ($name,$value) = split(/=/);
  $FORM{$name} = $value;
}

$name = $FORM{'name'};$name = 'default' if(!$name);	#指定が無ければ'default'を用いる。
$type = $FORM{'type'};$type = '0' if(!$type);		#指定がなければ'$ImageDir[0]'を用いる。
$width= $FORM{'width'};								#指定がなければ自動的に調整。（後述）

if($type =~ /%D/){&error('type');}					#数字以外が指定されていればエラー。
if($width =~ /%D/){&error('width');}				#同じく。

#-------------------------------

open(IN,"$DataFile");								#ファイルのオープン＆エラー処理。
 eval{'flock(IN,2);'};								#ファイルロック処理
  @datas = <IN>;									#カウントの取得。
close(IN);

if(!@datas){										#データが取得できなかったら？
sleep(1);											#１秒待って、
open(DATA,"$data_file");		#再び挑戦。
  eval{'flock(DATA,2);'};
   @datas = <DATA>;
close(DATA);

}

#-------------------------------

foreach(@datas){							#それぞれのデータについて、
  last if ($count);							#増加処理が終わってたらループを抜ける。
    if(/^$name\t/){							#カウンタ名が一致したら、
      chop;									#改行コード消して、
     ($name_t, $count_t) = split(/\t/);		#カウンタ名とカウントに分けて、
      $count_t++;							#カウント増やして、
      $count = $count_t;					#別変数に待避。
      $_ = "$name_t\t$count_t\n";			#データの更新。
    }
}

if(!$count>0){								#一度も名前が見つからなかったら、
  $NewData = "$name\t1\n";					#新しいデータをつくって、
  $count = 1;								#チェックして、
  push(@datas,$NewData);					#元のデータに加える。
}

#-------------------------------

open(OUT,">$DataFile");						#ファイルを開いて、
  eval{'flock(OUT,2);'};					#ロックして、
  print OUT @datas;							#カウントを書き込む。
close(OUT);									#閉じる。

#-------------------------------

$width2=length($count);
if($width < $width2){$width=$width2;}			#widthの最終設定。
												#実際の桁が指定桁より大きいときは、実際の桁を優先。

foreach(1..$width){								#合成する画像のリスト作成。
  $ImageNum = substr($count,-$_,1);				#桁の数字取得。
  $ImageNum = 0 if(!$ImageNum);					#桁数をそろえる。（余った部分に0を指定）
  unshift(@gifs,"$ImageDir[$type]$ImageNum.gif");
}

binmode(STDOUT);								#DOS用。バイナリモードに。
print "Content-type: image/gif\n\n";			#MIME-TYPE(?)の出力。
print &gifcat'gifcat(@gifs);					#GIFの合成＆出力。
