#!/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);
}