#!perl -w
#
# 高度データを補足 (50mメッシュ版)
# Nowral
# 99/10/19
#
# 入力ファイルのループ
@files = sort grep{-f} @ARGV;
foreach $oldargv (@files) {
printf "%s\n", (split(':', $oldargv))[-1];

# ファイル読み込み >経緯度から標高ファイル決定
undef @ofs;
undef %mems;
$i = 0;
open(IN, $oldargv);
while(<IN>){
  next unless /^T\t/;
  @ed = split("\t");
  if($ed[9] ne "DMS") { die "Not DMS !"; }
#  if($ed[10]!~/Tokyo/i) { die "$ed[10] Datum Not Tokyo"; }

  $ed[5] =~ /(\d+)。(\d+)'(\d+\.?\d*)"/; # 緯度
  $b = $1 + $2/60 + $3/3600;
  $ed[6] =~ /(\d+)。(\d+)'(\d+\.?\d*)"/; # 経度
  $l = $1 + $2/60 + $3/3600;
  ($mem1, $ofs1, $b0, $l0) = &ll2memn($b, $l);
  push(@ofs, $ofs1);
  push(@h, "-"); # とりあえずダミーデータ
  $mems{$mem1} .= " $i";
  ++$i;
}

# 標高読み込み <まとめて
$n = 0;
foreach $mem (keys %mems) {
  open(IN, $mem) || next;
  foreach $i (split(" ", $mems{$mem})) {
    seek(IN, $ofs[$i], 0) || next;
    read(IN, $h1, 5);
    $h[$i] = $h1 / 10;
    ++$n;
  }
}
next if $n==0; # 一個も標高データが取得できなければ意味なし

# 出力ファイル準備
$newargv = $oldargv . '.wh';
open(OUT, ">$newargv");
&MacPerl'SetFileInfo('GPSy', 'TEXT', $newargv);

# 標高補足
$i = 0;
open(IN, $oldargv);
while(<IN>){
  if(/^T\t/) {
    @ed = split("\t");
    $ed[8] = sprintf("%.1f", $h[$i]);
    $_ = join("\t", @ed);
    ++$i;
  }
  else{ s/^(#\tRecords:\t)\d+/"$1" . ($#h+1)/ie; } # データ数は正確に

  print OUT; # 書き出し
}
close(IN);
close(OUT);

# 1ファイル終了
print " ... done\n";
}

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



sub ll2memn { # 経緯度からmemファイル名、読み出し位置、中心経緯度を返す
  my($b, $l) = @_;
  my($b1, $l1, $b2, $l2, $mc1, $fn, $ofs);

# メッシュコード計算 < おかしな数値チェック?
  $b *= 1.5;
  $l -= 100;
  ($b1, $l1) = (int($b), int($l)); # 一次メッシュ
  $b = ($b - $b1) * 8;
  $l = ($l - $l1) * 8;
  ($b2, $l2) = (int($b), int($l)); # 二次メッシュ
  $b = int(($b - $b2) * 200);
  $l = int(($l - $l2) * 200);

# ファイル名
# 例:50M1:DATA:5939:593967.MEM
  $mc1 = sprintf("%02d%02d", $b1, $l1); # 一次メッシュコード
  $fn = "50M1:DATA:$mc1:$mc1$b2$l2.MEM"; # 日本Iのみ

# 読み出し位置
# レコード長 = メッシュコード + レコード番号 + 標高値*200 + 復帰・改行
#    1011    =       6        +      3       +   5   *200 +     2
# 元の式:$ofs = 1011 + (200-($b+1))*1011 + 9 + $l*5;
  $ofs = 202209 - $b*1011 + $l*5;

# メッシュ中心の経緯度
  $b = ( $b1 + ( $b2 + ($b+0.5)/200 )/8 )/1.5;
  $l =   $l1 + ( $l2 + ($l+0.5)/200 )/8 + 100;

#  print join(" : ",($fn, $ofs, $b, $l)),"\n";
  ($fn, $ofs, $b, $l);
}