#!/usr/bin/perl -w
#
# japan1km.filled.grd -> TEM
# Nowral
# 00/3/13
#
$time0 = time;

# japan1km.filled.grdデータ諸元
$hds = 0x043C;
$npix = 2080;
$nlin = 2573;
$lat0 =  46 * 3600;
$lon0 = 122 * 3600;
$lat2 =  24 * 3600;
$lon2 = 148 * 3600;
$dlat = 30; # 0.00833333333333333 * 3600;
$dlon = 45; # 0.0125 * 3600;
$lat2 = $lat0 - $nlin*$dlat;
$lon2 = $lon0 + $npix*$dlon;

# 入力ファイルのループ
@files = sort grep {-f} @ARGV;
#@files = sort grep {(-s $_)==$hds+$npix*$nlin*4} @ARGV;
foreach $oldargv (@files) {
$oldargv =~ /^(.*):(.*)$/;
$cwd = $1;
print "\n$2\n";
open(IN, $oldargv) || die;

# 1kmメッシュ(標高)ディレクトリ作成
$temdir = "$cwd:1KM";
if(! -e $temdir) { mkdir $temdir, 0777; }
elsif(! -d $temdir) { die "Couldn\'t make directory of TEMs"; }

# TEM生成
foreach $i (int($lat2/2400-135)+135 .. int($lat0/2400-1)) {
print "$i / ", int($lat0/2400-1), "\n";
foreach $j (int($lon0/3600-180)+80 .. int($lon2/3600-101)) {
  $mc1 = sprintf("%02d%02d", $i, $j); # 1次メッシュコード
#  print "$mc1\n";

# データ読み込み
  ($b1, $l1) = ($i*2400, ($j+100)*3600); # 左下経緯度
  $x = int(($l1 - $lon0)/$dlon);
  $y = int(($lat0 - $b1 - 2400)/$dlat); # = 46/10/00
  $ofs = ($y*$npix + $x)*4 + $hds;
  $data = "";
  foreach $k (0 .. 79) {
    $ofs += $npix * 4;
    seek(IN, $ofs, 0);
    read(IN, $_, 320) || last; # = 80 * 4
    $data .= $_;
  }
  $data .= "\x00" x (25600-length($data));
  next if($data eq "\x00"x25600); # 無効データ

# データ書き出し
  $newargv = "$temdir:$mc1.TEM";
  open(OUT, ">$newargv") || die "Couldn't open $newargv :$^E";
  MacPerl::SetFileInfo("hscd", "TEXT", $newargv);
  print OUT $mc1, "0025000", " "x8, "1995080080",
    &sec2dms($b1), &sec2dms($l1), &sec2dms($b1+2400), &sec2dms($l1+3600),
    "1", $mc1, " "x16, "1", " "x20, "0", " "x20, "0", " "x20,
    "0080", " "x80, "1"x80, " "x704, "\n\r"; #ヘッダー行
  foreach $k (0 .. 79) {
    printf OUT "%4s00%03d", $mc1, $k+1;
    for($ofs=$k*320; $ofs<$k*320+320; $ofs+=4) {
      $z = unpack("f", substr($data, $ofs, 4)); # 標高
      $z = sprintf("%05.0f", $z);
      printf OUT (length($z)==5) ? $z : "-9999";
    }
    printf OUT "\n\r";
  }
  close(OUT);
}
}

# 1ファイル終了
$sec = time - $time0;
$min = $sec / 60 % 60;
$hour = int($sec / 3600);
$sec %= 60;
printf "# total time %d:%2d:%2d\n", $hour, $min, $sec;
print " ... done\n";
}

MacPerl::Quit(2);
die "The Unhappy End";



sub sec2dms {
  my($s) = @_;
  $s = int($s + 0.5);
  $m = $s / 60 % 60;
  $d = int($s / 3600);
  $s %= 60;
  return sprintf("%03d%02d%02d", $d, $m, $s);
}