#!/usr/bin/perl

# Routine to convert the ancient ephemeris tables into a format similar to
# the modern ephemeris tables.
#
#  Format: % oldtab in_file out_file
#
# 27 Apr 2006, acr.
#
#==========================================================================

if (@ARGV != 3)
  { die "Usage: % oldtab in_file records out_file\n"; }

open(OLD,$ARGV[0]) || die "Could not open $ARGV[0] for reading ($!)";
open(NEW,">$ARGV[2]") || die "Could not open $ARGV[1] for writing ($!)";

for ($i=0; $i<$ARGV[1]; $i++)
  { read OLD, $line, 360;

    # UTC Time:

    $y = substr($line,0,4);
    $m = substr($line,4,2);
    $d = substr($line,6,2);
    $f = substr($line,8,6);

    $f = $f * 24.0;
    $hh = int($f);
    $f = ($f - ($hh*1.0)) * 60.0;
    $mm = int($f);
    $f = ($f - ($mm*1.0)) * 60.0;
    $ss = int ($f + 0.5);

    $utc = sprintf "%4d-%02d-%02dT%02d:%02d:%02d",$y,$m,$d,$hh,$mm,$ss;

    # Julian Date & ET-UTC Correction

    $julian = substr($line,15,13);
    $et_utc = substr($line,29,4);

    # Right ascension and declination:

    $hh = substr($line,34,2);
    $mm = substr($line,36,2);
    $ss = substr($line,38,5);

    $ra = sprintf "%9.5f", ($hh + ($mm/60.0) + ($ss/3600.0)) * 15.0;

    $s  = substr($line,44,1);
    $dd = substr($line,45,2);
    $mm = substr($line,47,2);
    $ss = substr($line,49,4);

    $dec = sprintf "%s%08.5f", $s, ($dd + ($mm/60.0) + ($ss/3600.0));

    # Coordinate RMS:

    $ra_rms  = substr($line,54,4);
    $dec_rms = substr($line,59,4);

    # Observatory info:

    $obs_code    = substr($line,64,3);
    $observatory = substr($line,69,36);

    $dd = substr($line,108,3);
    $mm = substr($line,112,2);
    $ss = substr($line,115,2);

    $obs_long = sprintf "%8.4f", ($dd + ($mm/60.0) + ($ss/3600.0));

    $s  = substr($line,120,1);
    $dd = substr($line,121,2);
    $mm = substr($line,124,2);
    $ss = substr($line,127,2);

    $obs_lat = sprintf "%s%07.4f", $s, ($dd + ($mm/60.0) + ($ss/3600.0));

    $dxy = substr($line,131,4);
    $dz  = substr($line,136,4);

    # Acceptance code and observer:

    $accept = substr($line,142,1);
    $observer = substr($line,146,24);

    # Notes:

    $note1 = substr($line,173,78);
    $note2 = substr($line,254,78);

    # Now we write these out:

    printf NEW "$utc $julian $ra $dec $ra_rms $dec_rms ";
    printf NEW "$obs_code $observatory $obs_long $obs_lat $dxy $dz ";
    printf NEW "$accept $observer $note1 $note2\r\n";

    # Next record:

  }

# Done.

close(OLD);
close(NEW);