+ if ( $ILS{$CODES{$last_id} . $last_rwy} eq "" ) {
+ print "DAFIFT adding (last): $CODES{$last_id} - $last_rwy\n";
+ &safe_add_record( $CODES{$last_id}, $last_rwy, "ILS", $loc_freq,
+ $loc_id, $loc_hdg, $loc_lat, $loc_lon,
+ $gs_elev, $gs_angle, $gs_lat, $gs_lon,
+ $dme_lat, $dme_lon, $om_lat, $om_lon, $mm_lat,
+ $mm_lon, $im_lat, $im_lon );
+ }
+}
+
+
+########################################################################
+# Process FAA data
+########################################################################
+
+sub load_faa() {
+ my( $file ) = shift;
+
+ open( FAA_ILS, "<$file" ) || die "Cannot open FAA data: $file\n";
+
+ <FAA_ILS>; # skip header line
+
+ while ( <FAA_ILS> ) {
+ chomp;
+
+ my ( $rec_type, $faa_id, $rwy, $type, $faa_date,
+ $faa_apt_name, $faa_city, $faa_st, $faa_state,
+ $faa_region, $id, $faa_len, $faa_wid, $faa_cat,
+ $faa_owner, $faa_operator, $faa_bearing, $faa_magvar,
+ $loc_type, $loc_id, $loc_freq, $faa_loc_latd,
+ $faa_loc_lats, $faa_loc_lond, $faa_loc_lons, $loc_width,
+ $faa_stop_dist, $faa_app_dist, $faa_gs_type, $gs_angle,
+ $faa_gs_freq, $faa_gs_latd, $faa_gs_lats, $faa_gs_lond,
+ $faa_gs_lons, $faa_gs_dist, $gs_elev, $faa_im_type,
+ $faa_im_latd, $faa_im_lats, $faa_im_lond, $faa_im_lons,
+ $faa_im_dist, $faa_mm_type, $faa_mm_id, $faa_mm_name,
+ $faa_mm_freq, $faa_mm_latd, $faa_mm_lats, $faa_mm_lond,
+ $faa_mm_lons, $faa_mm_dist, $faa_om_type, $faa_om_id,
+ $faa_om_name, $faa_om_freq, $faa_om_latd, $faa_om_lats,
+ $faa_om_lond, $faa_om_lons, $faa_om_dist,
+ $faa_om_backcourse, $faa_dme_channel, $faa_dme_latd,
+ $faa_dme_lats, $faa_dme_lond, $faa_dme_lons, $faa_dme_app_dist,
+ $faa_dme_stop_dist, $blank)
+ = $_ =~
+ m/^(.{4})(.{11})(.{3})(.{10})(.{10})(.{42})(.{26})(.{2})(.{20})(.{3})(.{4})(.{5})(.{4})(.{9})(.{50})(.{50})(.{3})(.{3})(.{15})(.{5})(.{6})(.{14})(.{11})(.{14})(.{11})(.{5})(.{5})(.{6})(.{15})(.{4})(.{6})(.{14})(.{11})(.{14})(.{11})(.{6})(.{7})(.{15})(.{14})(.{11})(.{14})(.{11})(.{6})(.{15})(.{2})(.{5})(.{3})(.{14})(.{11})(.{14})(.{11})(.{6})(.{15})(.{2})(.{5})(.{3})(.{14})(.{11})(.{14})(.{11})(.{6})(.{9})(.{4})(.{14})(.{11})(.{14})(.{11})(.{6})(.{5})(.{34})/;
+
+ $id = &strip_ws( $id );
+ $rwy = &strip_ws( $rwy );
+ $rwy =~ s/\/$//;
+ $rwy =~ s/\/$//;
+ $loc_id =~ s/^I-//;
+ my( $loc_hdg ) = $faa_bearing + make_dmagvar($faa_magvar);
+ my( $loc_lat ) = make_dcoord($faa_loc_lats) / 3600.0;
+ my( $loc_lon ) = make_dcoord($faa_loc_lons) / 3600.0;
+ # print "$loc_lon $loc_lat $faa_loc_lons $faa_loc_lats\n";
+ my( $gs_lat ) = make_dcoord($faa_gs_lats) / 3600.0;
+ my( $gs_lon ) = make_dcoord($faa_gs_lons) / 3600.0;
+ my( $im_lat ) = make_dcoord($faa_im_lats) / 3600.0;
+ my( $im_lon ) = make_dcoord($faa_im_lons) / 3600.0;
+ my( $mm_lat ) = make_dcoord($faa_mm_lats) / 3600.0;
+ my( $mm_lon ) = make_dcoord($faa_mm_lons) / 3600.0;
+ my( $om_lat ) = make_dcoord($faa_om_lats) / 3600.0;
+ my( $om_lon ) = make_dcoord($faa_om_lons) / 3600.0;
+ my( $dme_lat ) = make_dcoord($faa_dme_lats) / 3600.0;
+ my( $dme_lon ) = make_dcoord($faa_dme_lons) / 3600.0;
+
+ # my( $key );
+ # print "$id - $rwy\n";
+ # $key = $id . $rwy;
+ # print "-> $key -> $ILS{$key}\n";
+ # $key = "K" . $id . $rwy;
+ # print "-> $key -> $ILS{$key}\n";
+
+ if ( $rec_type eq "ILS1" ) {
+ if ( length( $id ) < 4 ) {
+ if ( $CodesByICAO{"K" . $id} ) {
+ $id = "K" . $id;
+ }
+ }
+ if ( $ILS{$id . $rwy} ne "" ) {
+ print "FAA updating: $id - $rwy $type\n";
+ &update_type( $id, $rwy, $type );
+ } else {
+ print "FAA adding: $id - $rwy\n";
+ &safe_add_record( $id, $rwy, $type, $loc_freq, $loc_id,
+ $loc_hdg, $loc_lat, $loc_lon, $gs_elev,
+ $gs_angle, $gs_lat, $gs_lon, $dme_lat,
+ $dme_lon, $om_lat, $om_lon, $mm_lat,
+ $mm_lon, $im_lat, $im_lon );
+ }
+ }