#!perl -w
#
# カード形式ファイルにをGPSy拡張形式ファイルに
# Nowral
# 01/3/16
#
$0 =~ /(.+:)/;
$cwd = $1;

$trn = 0;
$rtn = 0;
$nr = 0;
undef @wrs;
undef @rrs;
undef @trs;

# ファイルループ
foreach $oldargv (@ARGV) {
$oldargv =~ /(.+:)(.+)/;
print "$2\n";
open(IN, $oldargv) || next;
$_ = <IN>;
chomp;

# トラック読み込み
if(/^16$/) {
  $trn++;
  while (<IN>) {
    tr/\n\r//d;
    my(@ed) = split(",");
    next unless $#ed==1;
    push( @trs, join("\t",
     ("T", $trn, " ", "", "-",
     &deg2gdms($ed[0]/3600/256), &deg2gdms($ed[1]/3600/256),
     "-", " 0.0", "DMS", "Tokyo", "0", "0.00")
    ) );
  }
}
# ルート読み込み
elsif(/^144$/) {
  push( @rrs, join("\t", ("R", $rtn, sprintf("MFRT%02d", $rtn))) );
  while (<IN>) {
    tr/\n\r//d;
    my(@ed) = split(",");
    next unless $#ed==4;
    ++$nr;
    push( @rrs, join("\t",
     ("wx", $rtn, sprintf("MF%04d", $nr), "", "-",
     &deg2gdms($ed[3]/3600/256), &deg2gdms($ed[4]/3600/256),
     "-", " 0.0", "DMS", "Tokyo", "15/1", "0.00")
    ) );
  }
  $rtn++;
}
# スポット読み込み
elsif(/^8224$/) {
  while (<IN>) {
    tr/\n\r//d;
    my(@ed) = split(",");
    next unless $#ed==4;
    $ed[4] =~ /^\"([\-0-9A-Z]{0,6}).*\"\s*$/;
    push( @wrs, join("\t",
     ("Wx", "0", $1, "", "-",
     &deg2gdms($ed[2]/3600/256), &deg2gdms($ed[3]/3600/256),
     "-", " 0.0", "DMS", "Tokyo", "1/0", "0.00")
    ) );
  }
}

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

print "\n";
# ウェイポイント出力
printf "# ウェイポイント数 :%5d\n", $#wrs+1;;
if(@wrs) {
  $newargv = $cwd . "GPS Waypoint Data";
  open(OUT, ">$newargv") || die;
  MacPerl::SetFileInfo('GPSy', 'TEXT', $newargv);
  print OUT "GPSy3 Waypoint  (version 3.38r3)\tNUMBER\tNAME\tCOMMENT",
   "\tDATE\tLAT/NORTHING\tLON/EASTING\tZONE\tALT\tCOORD\tDATUM\tICON\tPROX\n";
  printf OUT "#\tRecords:\t%d\n", $#wrs+1;
  print OUT join("\n", @wrs), "\n";
  close(OUT);
}

# ルート出力
printf "# ルート数         :%5d\n", $#rrs+1-$rtn;
if(@rrs) {
  $newargv = $cwd . "GPS Route Data";
  open(OUT, ">$newargv") || die;
  MacPerl::SetFileInfo('GPSy', 'TEXT', $newargv);
  print OUT "GPSy3 Route     (version 3.38r3)\tNUMBER\tNAME\tCOMMENT",
   "\tDATE\tLAT/NORTHING\tLON/EASTING\tZONE\tALT\tCOORD\tDATUM\tICON\tPROX\n";
  printf OUT "#\tRecords:\t%d\n", $#rrs+1-$rtn;
  print OUT join("\n", @rrs), "\n";
  close(OUT);
}

# トラック出力
printf "# トラック数       :%5d\n", $#trs+1;
if(@trs) {
  $newargv = $cwd . "GPS Track Data";
  open(OUT, ">$newargv") || die;
  MacPerl::SetFileInfo('GPSy', 'TEXT', $newargv);
  print OUT "GPSy3 Track     (version 3.38r3)\tNUMBER\tNAME\tCOMMENT",
   "\tDATE\tLAT/NORTHING\tLON/EASTING\tZONE\tALT\tCOORD\tDATUM\tICON\tPROX\n";
  printf OUT "#\tRecords:\t%d\n", $#trs+1;
  print OUT join("\n", @trs), "\n";
  close(OUT);
}

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



sub deg2gdms { # GPSy format of position
  my($d) = @_;
  my($sgn, $m, $s, $sf);
  $d -=360 if $d>180; # longitude
  if($d<0) {
    $sgn = "-";
    $d *= -1;
  }
  else{ $sgn = ""; }
  $sf = int($d*36000 + 0.5);
  $s = int($sf/10) % 60;
  $m = int($sf/600) % 60;
  $d = int($sf/36000);
  $sf %= 10;
  sprintf("%s%d。%02d\'%02d\.%d\"", $sgn, $d, $m, $s, $sf);
}