#!/usr/bin/perl
#
# NMEA出力をGPSy拡張フォーマットに
# Nowral
# 98.12.19
#
require "CommConnect.pl";
$* = 1;
$mr = int( &MacPerl'Ask("How many records ?", "10") );
$tt = int( &MacPerl'Ask("Freq. (sec) ?", "1") );
if($tt<1) { $tt = 1; }
print "\#Records:\t",$mr,"\n";
print "Freq:\t",$tt,"\n";
$tc = 0;
if($mr==0) { $tc = 3; }
while($tc<3) {
print "Stage:\t",$tc+1,"\n";
&CommConnect'Prepare("Serial Tool");
&CommConnect'Choose();
# &CommConnect'ChangeSettings("Baud 4800 DataBits 8 Parity None StopBits 1 Port \"プリンタ/モデムポート\" Handshake XON/XOFF HoldConnection False RemindDisconnect False");
print &CommConnect'GetSettings(), "\n";
&CommConnect'OpenConnection();
$_ = "";
$st = time;
while(time-$st<3) { $_ .= &CommConnect'Receive(); }
if(!/,/) {
print "Connection Failed.\n";
++$tc;
}
else {
print "Connection OK.\n";
$tc = 3;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
++$mon;
$mday =~ s/^(\d)$/0$1/;
$hour =~ s/^(\d)$/0$1/;
$min =~ s/^(\d)$/0$1/;
$newargv = "NMEA Log 19".$year."/".$mon."/".$mday."-".$hour.".".$min;
open(ARGVOUT, ">$newargv");
&MacPerl'SetFileInfo('GPSy', 'TEXT', $newargv);
print ARGVOUT "GPSy3 Track (version 3.20)\tNUMBER\tNAME\tCOMMENT\tDATE\tLAT/NORTHING\tLON/EASTING\tZONE\tALT\tCOORD\tDATUM\tICON\tPROX\n";
print ARGVOUT "#\tRecords:\t",$mr,"\n";
$pt = $st - $tt;
$rc = 0;
$_ = "";
while($rc<$mr) {
$_ .= &CommConnect'Receive();
s/[\n\r]//g;
s/\$/\n\$/g;
if(/\$GPRMC.*\n/) {
$_ = $';
$nt = time;
if($nt-$pt >= $tt) {
++$rc;
$pt = $nt;
($hour,$min,$sec,$latd,$latm,$lats,$lond,$lonm,$lons,$mday,$mon,$year) = ($& =~/\$GPRMC,(\d\d)(\d\d)(\d\d),A,(\d\d)(\d\d)(\.\d+),N,(\d\d\d)(\d\d)(\.\d+),E,\d+\.\d+,\d+\.\d+,(\d\d)(\d\d)(\d\d),/);
($lats,$latsf) = &dec2sec("0".$lats);
($lons,$lonsf) = &dec2sec("0".$lons);
$hour += 9; #日本時間
if($hour > 24) { $hour -= 24; $mday++ }
$hour =~ s/^(\d)$/0$1/;
$mday =~ s/^(\d)$/0$1/;
print ARGVOUT "T\t1\tTRACK\t\t$mon/$mday/19$year $hour:$min:$sec\t$latd。$latm\'$lats\.$latsf\"\t$lond。$lonm\'$lons\.$lonsf\"\t-\t0.0\tDMS\tTokyo\t0\t0.00\n";
print "0"x(length($mr)-length($rc)),$rc," :\t19$year/$mon/$mday $hour:$min:$sec\t$latd。$latm\'$lats\.$latsf\"\t$lond。$lonm\'$lons\.$lonsf\n";
}
}
}
}
&CommConnect'CloseConnection();
&CommConnect'Cleanup();
}
#&MacPerl'Quit(2);
die "The Unhappy End";
sub dec2sec {
local($s) = @_;
$sf = int($s*600 + 0.5);
$s = int($sf/10);
$sf-= $s*10;
$s =~ s/^(\d)$/0$1/;
($s,$sf);
}