diff --git a/scripts/perl/dafif/dafift2fix.pl b/scripts/perl/dafif/dafift2fix.pl new file mode 100755 index 000000000..54797bb3e --- /dev/null +++ b/scripts/perl/dafif/dafift2fix.pl @@ -0,0 +1,21 @@ +#!/usr/bin/perl +######################################################################## +# Convert DAFIFT WPT.TXT to FlightGear format. +######################################################################## + +use strict; + +<>; # skip header line + +print "// FlightGear intersection data, generated from DAFIFT WPT.TXT\n"; + +while (<>) +{ + chop; + my @F = split(/\t/); + printf("%-5s %10.6f %11.6f\n", $F[0], $F[14], $F[16]); +} + +print "[End]\n"; + +# end of dafif2fix.pl diff --git a/scripts/perl/dafif/dafift2nav.pl b/scripts/perl/dafif/dafift2nav.pl new file mode 100755 index 000000000..570eb7a48 --- /dev/null +++ b/scripts/perl/dafif/dafift2nav.pl @@ -0,0 +1,146 @@ +#!/usr/bin/perl +######################################################################## +# Convert DAFIFT NAV.TXT to FlightGear format. +######################################################################## + +use strict; + +my @TYPES = ( + '', # Unknown + 'V', # VOR + 'V', # VORTAC + 'D', # TACAN + 'V', # VOR/DME + 'N', # NDB + '', + 'N', # NDB/DME + '', + 'D' # DME + ); + +my @TYPE_NAMES = ( + '', + 'VOR', + 'VORTAC', + 'TACAN', + 'VOR/DME', + 'NDB', + '', + 'NDB/DME', + '', + 'DME' + ); + +my @HAS_DME = ( + 'N', # Unknown + 'N', # VOR + 'Y', # VORTAC + 'Y', # TACAN + 'Y', # VOR/DME + 'N', # NDB + 'N', + 'Y', # NDB/DME (not used, though) + 'N', + 'Y' # DME + ); + +# Make a frequency from a DME channel +sub make_freq { + my ($type, $channel) = (@_); + my $freq; + if ($channel < 67) { + $freq = 108 + (($channel - 17)/10.0); + } else { + $freq = 112 + (($channel - 67)/10.0); + } + if ($type == 9) { + $freq += 0.05; + } + return $freq; +} + +# Make a range based on navaid type and purpose +sub make_range { + my ($type, $usage) = (@_); + if ($type == 1 || $type == 2 || $type ==4) { # VOR + if ($usage == 'H' || $usage == 'B') { + return 200; + } elsif ($usage == 'T') { + return 20; + } else { + return 50; + } + } elsif ($type == 3 || $type == 7) { # DME + if ($usage == 'T') { + return 50; + } else { + return 200; + } + } else { # NDB + if ($usage == 'T') { + return 50; + } else { + return 200; + } + } +} + +sub write_navaid { + my ($type, $lat, $lon, $elev, $freq, $range, $dme, $id, $magvar, $name) + = (@_); + + printf("%s %10.6f %11.6f %6d %7.2f %4d %s %-4s %s %s %s\n", + $TYPES[$type], $lat, $lon, $elev, $freq, $range, $dme, $id, + $magvar, $name, $TYPE_NAMES[$type]); +} + + +<>; # skip header line + +print "// FlightGear navaid data, generated from DAFIFT NAV.TXT\n"; + +while (<>) +{ + chop; + my @F = split(/\t/); + + my $type = $F[1]; + if ($TYPES[$type] eq '') { + warn("Bad type for " . $F[0] . "(" . $F[5] . ")\n"); + next; + } + my $lat = $F[18]; + my $lon = $F[20]; + my $elev = $F[23]; + my $freq = $F[8]/1000; + if ($type == 3 || $type == 9) { + $freq = make_freq($type, 0 + $F[10]); + } + my $range = 0 + $F[14]; + if ($range == 0) { + $range = make_range($type, $F[9]); + } + my $id = $F[0]; + my $magvar = $F[21]; + if ($magvar eq '') { + $magvar = 'XXX'; + } else { + $magvar =~ /^([EW])([0-9.]+)( .*)?/; + $magvar = sprintf("%02d%s", $2/100000, $1); + } + my $name = $F[5]; + + if ($type == 7) { # NDB/DME + write_navaid(9, $lat, $lon, $elev, make_freq(9, $F[10]), $range, + 'Y', $id, $magvar, $name); + $type = 5; + } + write_navaid($type, $lat, $lon, $elev, $freq, $range, + $HAS_DME[$F[1]], $id, $magvar, $name); + + +} + +print "[End]\n"; + +# end of dafif2fix.pl