#!/bin/perl
#
##########################################################################
#
# TITLE:
#       opps2xopps
#
# AUTHOR:
#	Pam Gilmore & Cassie Mulnix
#
# DESCRIPTION:
#       Translate Sunview OPPS data file into XOPPS data file
#
##########################################################################

$[ = 0;                         # set array base to 0
$\ = "\n";                      # set output record separator
select(STDERR); $| = 1;         # flush output buffer (STDERR)
select(STDOUT); $| = 1;         # flush output buffer (STDOUT)

$default_font_size = '12';
$default_color = '0';
$font_size = $default_font_size;
$color = $default_color;
$max_x_offset = 991;
$max_y_offset = 735;

# translation of fonts
$font{'0'} = '0';
$font{'1'} = '256';
$font{'2'} = '1024';
$font{'3'} = '1280';
$font{'4'} = '2048';
$font{'5'} = '2304';

# translation of points
$point{'0'} = '10';
$point{'1'} = '12';
$point{'2'} = '14';
$point{'3'} = '14';
$point{'4'} = '18';
$point{'5'} = '24';
$point{'6'} = '10';
$point{'7'} = '12';
$point{'8'} = '14';
$point{'9'} = '14';
$point{'10'} = '18';
$point{'11'} = '24';
$point{'12'} = '8';

# translation of symbols
$sym{'0'} = '12';
$sym{'1'} = '4';
$sym{'2'} = '5';
$sym{'3'} = '2';
$sym{'4'} = '3';
$sym{'5'} = '0';
$sym{'6'} = '1';
$sym{'14'} = '13';
$sym{'15'} = '6';
$sym{'16'} = '9';

#
# for converting to doy
#
@mndays = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365);
@lpdays = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366);

#
# add standard MCA perl libraries to search path
#
if (defined($ENV{'MCA_PERL_LIB_PATH'})) {
    @INC = ($ENV{'MCA_PERL_LIB_PATH'}, @INC);
}
$image_path = '"/home/chekov/gllmct/images/bitmaps/';

if (!open (TEST_OUTPUT, '> test_output')) {
    print STDERR 'Unable to open test_output';
}

# 
# Check command line options
#
while (($test = shift(@ARGV)) =~ /^-/) {
    if ($test eq '-f') {
        $test = shift(@ARGV);
        $font_size = $test;
    } elsif ($test eq '-c') { 
        $test = shift(@ARGV);
        $color = $test;
    } else {
        print STDERR 'Usage: opps2xopps [-f <font_size>] [-c <color>] ',
                  '<opps_file>';
	exit(2);
    }
}
unshift(@ARGV, $test);

#
# Check argument
#
if ($ARGV[0] eq '') {
    print STDERR 'Usage: opps2xopps [-f <font_size>] [-c <color>] <opps_file>';
    exit(2);
} else {
    $opps_in = $ARGV[0];
    $opps_out = $opps_in . '.xopps';
}
# print TEST_OUTPUT 'opps_in=',$opps_in,' opps_out=',$opps_out;

#
# Open files
#
if (!open (OPPS, "< $opps_in")) {
    print STDERR 'Unable to open input file: ', $opps_in;
}
if (!open (XOPPS, "> $opps_out") ) {
    print STDERR 'Unable to open output file: ', $opps_out;
}

#
# Process file
#
@fld = ();
@chart_line = ();

while (<OPPS>) {
    chop;
    @outfld = ();
    @fld = split(' ',$_);
    if ($fld[0] =~ /N|W|C|B|L|E|A|S|U|T|X|P|M|I|D|H/) {
        # Go to subroutine for this type of record
        $translate = '&translate_' . $fld[0] . '_record';
	# print TEST_OUTPUT 'current input line: ',$_;
        # print TEST_OUTPUT 'translate=', $translate;
        eval($translate);
    } else {
        print STDERR 'Unknown type of record: ', $_;
	close(OPPS);
	close(XOPPS);
	exit(2);
    }
}
&write_file;

close(OPPS);
close(XOPPS);

print STDERR 'Processing complete. Output in: ', $opps_out;
#
##########################################################################
#
# SUBROUTINE
#       translate_A_record       
#
# DESCRIPTION
#       Translate activity record
#
##########################################################################
sub translate_A_record {
    $outfld[0] = 'O';
    # start date
    $outfld[1] = &ymd_to_utc($fld[3], $fld[1], $fld[2]);

    # end date
    $outfld[2] = &ymd_to_utc($fld[6], $fld[4], $fld[5]);

    # up ramp date
    $outfld[3] = &ymd_to_utc($fld[9], $fld[7], $fld[8]);

    # down ramp date
    $outfld[4] = &ymd_to_utc($fld[12], $fld[10], $fld[11]);

    # line
    $outfld[5] = $fld[13];
    # start symbol
    if (defined $sym{$fld[14]}) {
        $outfld[6] = $sym{$fld[14]};      # to keep old symbol
    } else {
	print STDERR 'Old Start Symbol could not be kept for A record: ',$_;
	$outfld[6] = '0';
    }
    # end symbol 
    if (defined $sym{$fld[15]}) {
        $outfld[7] = $sym{$fld[15]};  # to keep old symbol
    } else {
	print STDERR 'Old End Symbol could not be kept for A record: ',$_;
	$outfld[7] = '0';
    }
    # percent done date
    $outfld[8] = &ymd_to_utc($fld[18], $fld[16], $fld[17]);

    # percent done
    $outfld[9] = $fld[19];

    # baseline start date
    $outfld[10] = &ymd_to_utc($fld[23], $fld[21], $fld[22]);

    # baseline end date
    $outfld[11] = &ymd_to_utc($fld[26], $fld[24], $fld[25]);

    # fill pattern
    $outfld[12] = $fld[20];
    # layer
    $outfld[13] = $fld[27];
    # display time
    $outfld[14] = '0';  
    # horiz text position
    $outfld[15] = '2';
    # vert text position
    $outfld[++$#outfld] = '2';
    # font
    $outfld[++$#outfld] = '0';   
    # point
    $outfld[++$#outfld] = $font_size;
    # color
    $outfld[++$#outfld] = $color;
    # text
    $outfld[++$#outfld] = '""';
    # idtext
    $outfld[++$#outfld] = '""';
    # idtog
    $outfld[++$#outfld] = '0';
    # idhpos
    $outfld[++$#outfld] = '0';
    # idvpos
    $outfld[++$#outfld] = '2';

    $recout[++$#recout] = join(' ',@outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_B_record       
#
# DESCRIPTION
#       Translate level record
#
##########################################################################
#
sub translate_B_record {

    $outfld[0] = $fld[0];
    # X offset
    if ($fld[1] + $fld[4] > $max_x_offset) {
	$outfld[1] = $max_x_offset;
    } else {
	$outfld[1] = $fld[1] + $fld[4];
    }
    # Y offset
    if ($fld[2] + $fld[4] > $max_y_offset) {
	$outfld[2] = $max_y_offset;
    } else {
	$outfld[2] = $fld[2] + $fld[4];
    }
    # Text
    $outfld[3] = $fld[7];
    # font
    if ((($fld[5] >= '0') && ($fld[5] <= '5')) || ($fld[5] eq '12')) {
	$outfld[4] = $font{'0'};
    } else {
	$outfld[4] = $font{'1'};
    }
    # point
    if (($fld[5] eq '3') || ($fld[5] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[5] = $point{$fld[5]};
    # radius
    $outfld[6] = $fld[4];
    # page
    $outfld[7] = $fld[3];
    # layer
    $outfld[8] = $fld[6];
    # color
    $outfld[9] = $color;

    $recout[++$#recout] = join(' ', @outfld);
}
#
#

##########################################################################
#
# SUBROUTINE
#       translate_C_record       
#
# DESCRIPTION
#       Translate the chart record (only one per file)
#
##########################################################################
#
sub translate_C_record {
    $outfld[0] = $fld[0];
    # start date
    $outfld[1] = &ymd_to_utc($fld[3], $fld[1], $fld[2]);

    # end date
    $outfld[2] = &ymd_to_utc($fld[6], $fld[4], $fld[5]);

    # status date
    $outfld[3] = &ymd_to_utc($fld[9], $fld[7], $fld[8]);

    # status flag
    $outfld[4] = $fld[10];
    # font
    if ((($fld[11] >= '0') && ($fld[11] <= '5')) || ($fld[11] eq '12')) {
	$outfld[5] = $font{'0'};
    } else {
	$outfld[5] = $font{'1'};
    }
    # point
    if (($fld[11] eq '3') || ($fld[11] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[6] = $point{$fld[11]};
    # color
    $outfld[7] = $color;
    # year flag
    if ($fld[12] eq '0') {
	$outfld[8] = '1';
    } elsif ($fld[12] eq '1') {
	$outfld[8] = '2';
    } elsif ($fld[12] eq '2') {
        $outfld[8] = '0';
    }
    # resolution
    if ($fld[13] > 5) {
        print STDERR 'Reset the resolution in plot setup for DAILY or DOW';
    }
    $outfld[9] = $fld[13];
    # layer
    $outfld[10] = '0';
    # utc_bar	
    if (defined $utc) {
        $outfld[11] = $utc;
    } else {
	$outfld[11] = '0';
    }
    # vgrid		# 0 = solid    
    $outfld[12] = '0';

    $C_line = join(' ',@outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_D_record       
#
# DESCRIPTION
#       Translate simple activity record
#
##########################################################################
#
sub translate_D_record {
    
    $outfld[0] = $fld[0];
    # start date
    $outfld[1] = &ymd_to_utc($fld[3], $fld[1], $fld[2]);

    # end date
    $outfld[2] = &ymd_to_utc($fld[6], $fld[4], $fld[5]);

    # line
    $outfld[3] = $fld[7];
    # start symbol (none)
    if (defined $sym{$fld[8]}) {
        $outfld[4] = $sym{$fld[8]};      # to keep old symbol
    } else {
	print STDERR 'Old Start Symbol could not be kept for D record: ',$_;
	$outfld[4] = '0';
    }
    # end symbol 
    if (defined $sym{$fld[9]}) {
        $outfld[5] = $sym{$fld[9]};  # to keep old symbol
    } else {
	print STDERR 'Old End Symbol could not be kept for D record: ',$_;
	$outfld[5] = '0';
    }
    # percent date
    $outfld[6] = &ymd_to_utc($fld[12], $fld[10], $fld[11]);

    # done percent
    $outfld[7] = $fld[13];
    # fill pattern
    $outfld[8] = $fld[14];
    # layer
    $outfld[9] = $fld[15];
    # display time
    $outfld[10] = $fld[16];
    # horizontal text position (left, center, right)
    $outfld[11] = $fld[17];
    # vertical text position (above, below, center)
    $outfld[++$#outfld] = '2';
    # font
    if ((($fld[18] >= '0') && ($fld[18] <= '5')) || ($fld[18] eq '12')) {
	$outfld[++$#outfld] = $font{'0'};
    } else {
	$outfld[++$#outfld] = $font{'1'};
    }
    # point
    if (($fld[18] eq '3') || ($fld[18] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[++$#outfld] = $point{$fld[18]};
    # color
    $outfld[++$#outfld] = $color;
    # text
    @text_flds = split('"',$_);
    $outfld[++$#outfld] = '"' . $text_flds[1] . '"';
    # idtext
    $outfld[++$#outfld] = '""';
    # idtog
    $outfld[++$#outfld] = '0';
    # idhpos
    $outfld[++$#outfld] = '0';
    # idvpos
    $outfld[++$#outfld] = '2';


    $recout[++$#recout] = join(' ', @outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_E_record       
#
# DESCRIPTION
#       Translate event record
#
##########################################################################
#
sub translate_E_record {
     
    $outfld[0] = $fld[0];
    # start date
    if (length($fld[3]) < 4) {
	if ($fld[3] < 40) {
	    $fld[3] = '20' . $fld[3];
   	} else {
	    $fld[3] = '19' . $fld[3];
	}
    }
    $outfld[1] = &ymd_to_utc($fld[3], $fld[1], $fld[2]);

    # line
    $outfld[2] = $fld[4];
    # symbol
    if (defined $sym{$fld[5]}) {
        $outfld[3] = $sym{$fld[5]};      # to keep old symbol
    } else {
	print STDERR 'Old Start Symbol could not be kept for E record: ',$_;
	$outfld[3] = '0';
    }
    # label char in quotes 
    $outfld[4] = $fld[12];
    # moffset 	
    $outfld[5] = '0';
    @text = split('"', $_);
    $outfld[6] = '"' . $text[3] . '"';
    # text2                
    $outfld[7] = '"' . $text[5] . '"';
    @text = ();
    # font
    if ((($fld[6] >= '0') && ($fld[6] <= '5')) || ($fld[6] eq '12')) {
	$outfld[8] = $font{'0'};
    } else {
	$outfld[8] = $font{'1'};
    }
    # point
    if (($fld[6] eq '3') || ($fld[6] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[9] = $point{$fld[6]};
    # hpos1
    if ($fld[7] eq '1') {
	$outfld[10] = '2';
    } elsif ($fld[7] eq '2') {
	$outfld[10] = '1';
    } else {
        $outfld[10] = $fld[7];
    }
    # hpos2
    if ($fld[9] eq '1') {
	$outfld[11] = '2';
    } elsif ($fld[9] eq '2') {
	$outfld[11] = '1';
    } else {
        $outfld[11] = $fld[9];
    }
    # vpos1
    if ($fld[8] eq '1') {
	$outfld[12] = '2';
    } elsif ($fld[8] eq '2') {
	$outfld[12] = '1';
    } else {
        $outfld[12] = $fld[8];
    }
    # vpos2
    if ($fld[10] eq '1') {
	$outfld[13] = '2';
    } elsif ($fld[10] eq '2') {
	$outfld[13] = '1';
    } else {
        $outfld[13] = $fld[10];
    }
    # layer
    $outfld[14] = $fld[11];
    # color
    $outfld[15] = $color;
    # disp
    $outfld[16] = '0';
    # idtext
    $outfld[17] = '""';
    # idtog
    $outfld[18] = '0';
    # idhpos
    $outfld[19] = '0';
    # idvpos
    $outfld[20] = '2';
  
    $recout[++$#recout] = join(' ', @outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_H_record       
#
# DESCRIPTION
#       Translate horizontal line record
#
##########################################################################
#
sub translate_H_record {

    foreach $i (0 .. 4) {
        $outfld[$i] = $fld[$i];
    }
    $outfld[5] = $color;
    # font
    if ((($fld[5] >= '0') && ($fld[5] <= '5')) || ($fld[5] eq '12')) {
	$outfld[6] = $font{'0'};
    } else {
	$outfld[6] = $font{'1'};
    }
    # point
    if (($fld[5] eq '3') || ($fld[5] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[7] = $point{$fld[5]};
    # grid
    $outfld[8] = $fld[6];
    # text
    @text_flds = split('"',$_);
    $outfld[++$#outfld] = '"' . $text_flds[1] . '"';

    $H_line[++$#H_line] = join(' ', @outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_I_record       
#
# DESCRIPTION
#       Translate image record
#
##########################################################################
#
sub translate_I_record {
    
    print STDERR 'Change icon file to bitmap file: ',$fld[3];
    $outfld[0] = $fld[0];
    # X offset
    if ($fld[1] > $max_x_offset) {
	$outfld[1] = $max_x_offset;
    } else {
	$outfld[1] = $fld[1];
    }
    # Y offset
    if ($fld[2] > $max_y_offset) {
	$outfld[2] = $max_y_offset;
    } else {
	$outfld[2] = $fld[2];
    }
    # scale (1,2,3,4)                
    $outfld[3] = '1';
    # color
    $outfld[4] = $color;
    # layer
    $outfld[++$#outfld] = '0';
    # file
    # get rid of double quote 
    substr($fld[3],0,1) = '';
    $outfld[++$#outfld] = $image_path . $fld[3];

    $recout[++$#recout] = join(' ', @outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_L_record       
#
# DESCRIPTION
#       Translate symbol record
#
##########################################################################
#
sub translate_L_record {

    $outfld[0] = $fld[0];
    # X offset
    if ($fld[1] > $max_x_offset) {
        $outfld[1] = $max_x_offset;
    } else {
        $outfld[1] = $fld[1];
    }
    # Y offset
    if ($fld[2] > $max_y_offset) {
        $outfld[2] = $max_y_offset;
    } else {
        $outfld[2] = $fld[2];
    }
    # symbol
    if (defined $sym{$fld[3]}) {
        $outfld[3] = $sym{$fld[3]};      # to keep old symbol
    } else {
	print STDERR 'Old Start Symbol could not be kept for L record: ',$_;
	$outfld[3] = '0';
    }
    # page size layer
    foreach $i (4 .. $#fld) {
	$outfld[$i] = $fld[$i];
    }
    $outfld[++$#outfld] = $color;

    $recout[++$#recout] = join(' ',@outfld);

}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_M_record       
#
# DESCRIPTION
#       Translate internals record
#
##########################################################################
#
sub translate_M_record {

    $outfld[0] = 'F';
    # number of pages
    $outfld[1] = $fld[1];
    # current page
    $outfld[2] = $fld[2];
    # lines per page    
    $outfld[3] = $fld[3];
    # snap event
    $outfld[4] = $fld[4];
    # snap text
    $outfld[5] = $fld[5];
    # issue_disp
    $outfld[6] = 1;     
    # auto_renum
    $outfld[7] = $fld[7];    
    # save utc
    $utc = $fld[6];

    $F_line = join(' ', @outfld);

}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_N_record       
#
# DESCRIPTION
#       Translate chart line
#
##########################################################################
#
sub translate_N_record {

    $outfld[0] = 'A'; 
    foreach $i (1 .. 7) {
        $outfld[++$#outfld] = $fld[$i];
    }
    if (($outfld[2] eq '0') && ($outfld[3] > $max_x_offset)) {
	$outfld[3] = $max_x_offset;
    } elsif (($outfld[2] eq '1') && ($outfld[3] > $max_y_offset)) {
	$outfld[3] = $max_y_offset;
    }
    # position border lines and chart date lines
    if ($outfld[1] eq '0') {
	$outfld[3] = '0';
    }
    if (($outfld[1] eq '4') && ($outfld[2] eq '0')) {
	$outfld[3] = '999';
    }
    if (($outfld[1] eq '2') && ($outfld[2] eq '1')) {
	$outfld[3] = '154';
    }
    $chart_line[++$#chart_line] = join(' ', @outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_P_record       
#
# DESCRIPTION
#       Translate page record
#
##########################################################################
#
sub translate_P_record {
    
    $outfld[0] = $fld[0];
    # X offset
    if ($fld[1] > $max_x_offset) {
        $outfld[1] = $max_x_offset;
    } else {
        $outfld[1] = $fld[1];
    }
    # Y offset
    if ($fld[2] > $max_y_offset) {
        $outfld[2] = $max_y_offset;
    } else {
        $outfld[2] = $fld[2];
    }
    # font
    if ((($fld[3] >= '0') && ($fld[3] <= '5')) || ($fld[3] eq '12')) {
	$outfld[3] = $font{'0'};
    } else {
	$outfld[3] = $font{'1'};
    }
    # point
    if (($fld[3] eq '3') || ($fld[3] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[4] = $point{$fld[3]};
    # layer
    $outfld[5] = $fld[4];
    # color
    $outfld[6] = $color;

    $recout[++$#recout] = join(' ', @outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_S_record       
#
# DESCRIPTION
#       Translate slip record
#
##########################################################################
#
sub translate_S_record {

    $outfld[0] = $fld[0];
    # start date
    $outfld[1] = &ymd_to_utc($fld[3], $fld[1], $fld[2]);

    # end date
    $outfld[2] = &ymd_to_utc($fld[6], $fld[4], $fld[5]);

    # line
    $outfld[3] = $fld[7];
    # start symbol
    if (defined $sym{$fld[8]}) {
        $outfld[4] = $sym{$fld[8]};      # to keep old symbol
    } else {
	print STDERR 'Old Start Symbol could not be kept for S record: ',$_;
	$outfld[4] = '0';
    }
    # end symbol
    if (defined $sym{$fld[9]}) {
        $outfld[5] = $sym{$fld[9]};      # to keep old symbol
    } else {
	print STDERR 'Old Start Symbol could not be kept for S record: ',$_;
	$outfld[5] = '0';
    }
    # schar
    $outfld[++$#outfld] = $fld[12];
    # echar
    $outfld[++$#outfld] = $fld[13];
    # line type
    $outfld[++$#outfld] = $fld[10];
    # color
    $outfld[++$#outfld] = $color;
    # font
    $outfld[++$#outfld] = '0';
    # point
    $outfld[++$#outfld] = $font_size;
    # text
    $outfld[++$#outfld] = '""';
    # horiz position
    $outfld[++$#outfld] = '1';
    # vert position
    $outfld[++$#outfld] = '2';
    # layer
    $outfld[++$#outfld] = $fld[11];
    # disp
    $outfld[++$#outfld] = '0';
    # idtext
    $outfld[++$#outfld] = '""';
    # idtog
    $outfld[++$#outfld] = '0';   
    # idhpos
    $outfld[++$#outfld] = '0';  
    # idvpos
    $outfld[++$#outfld] = '2';   

    $recout[++$#recout] = join(' ', @outfld);
}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_T_record       
#
# DESCRIPTION
#       Translate text record
#
##########################################################################
#
sub translate_T_record {
    
    $outfld[0] = $fld[0];
    # X offset
    if ($fld[1] > $max_x_offset) {
	$outfld[1] = $max_x_offset;
    } else {
	$outfld[1] = $fld[1];
    }
    # Y offset
    if ($fld[2] - 12 > $max_y_offset) {
	$outfld[2] = $max_y_offset;
    } else {
	$outfld[2] = $fld[2] - 12;
    }
    # justification
    $outfld[3] = $fld[4];
    # font
    if ((($fld[5] >= '0') && ($fld[5] <= '5')) || ($fld[5] eq '12')) {
	$outfld[4] = $font{'0'};
    } else {
	$outfld[4] = $font{'1'};
    }
    # point
    if (($fld[5] eq '3') || ($fld[5] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[5] = $point{$fld[5]};
    # color
    $outfld[6] = $color;
    # layer
    $outfld[7] = '0';
    # page
    $outfld[8] = '0';
    # text                     
    $outfld[9] = '';
    foreach $i (7 .. $#fld) {
        $outfld[9] .= $fld[$i] . ' ';
    }

    $recout[++$#recout] = join(' ', @outfld);
}

#
#
##########################################################################
#
# SUBROUTINE
#       translate_U_record       
#
# DESCRIPTION
#       Translate sequence record
#
##########################################################################
#
sub translate_U_record {

    $outfld[0] = $fld[0];
    # start date
    $outfld[1] = &ymd_to_utc($fld[3], $fld[1], $fld[2]);

    # end date
    $outfld[2] = &ymd_to_utc($fld[6], $fld[4], $fld[5]);

    # disp
    $outfld[3] = $fld[7];
    # solid
    $outfld[4] = $fld[8];
    # text position
    $outfld[5] = $fld[9];
    $outfld[6] = '2';
    # line
    $outfld[++$#outfld] = $fld[10];
    # font
    if ((($fld[12] >= '0') && ($fld[12] <= '5')) || ($fld[12] eq '12')) {
	$outfld[++$#outfld] = $font{'0'};
    } else {
	$outfld[++$#outfld] = $font{'1'};
    }
    # point
    if (($fld[12] eq '3') || ($fld[12] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[++$#outfld] = $point{$fld[12]};
    # layer
    $outfld[++$#outfld] = $fld[13];
    # color
    $outfld[++$#outfld] = $color;    
    # text
    @text_flds = split('"',$_);
    $outfld[++$#outfld] = '"' . $text_flds[1] . '"';
    # rtc       
    $outfld[++$#outfld] = '0';
    # idtext
    $outfld[++$#outfld] = '""';
    # idtog
    $outfld[++$#outfld] = '0';
    # idhpos
    $outfld[++$#outfld] = '0';
    # idvpos
    $outfld[++$#outfld] = '2';

    $recout[++$#recout] = join(' ', @outfld);
}

#
#
##########################################################################
#
# SUBROUTINE
#       translate_W_record       
#
# DESCRIPTION
#       Translate status date record
#
##########################################################################
#
sub translate_W_record {

    $outfld[0] = $fld[0];
    # X offset
    if ($fld[1] > $max_x_offset) {
        $outfld[1] = $max_x_offset;
    } else {
        $outfld[1] = $fld[1];
    }
    # Y offset
    if ($fld[2] - $point{$fld[3]} > $max_y_offset) {
        $outfld[2] = $max_y_offset;
    } else {
        $outfld[2] = $fld[2] - $point{$fld[3]};
    }
    # font
    if ((($fld[3] >= '0') && ($fld[3] <= '5')) || ($fld[3] eq '12')) {
	$outfld[3] = $font{'0'};
    } else {
	$outfld[3] = $font{'1'};
    }
    # point
    if (($fld[3] eq '3') || ($fld[3] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[4] = $point{$fld[3]};
    # layer
    $outfld[5] = $fld[4];
    # color
    $outfld[6] = $color;

    $recout[++$#recout] = join(' ', @outfld);

}
#
#
##########################################################################
#
# SUBROUTINE
#       translate_X_record       
#
# DESCRIPTION
#       Translate chart date record
#
##########################################################################
#
sub translate_X_record {

    $outfld[0] = 'Z';
    # x and y offsets and font
    foreach $i (1 .. 2) {
        $outfld[$i] = $fld[$i];
    }
    # font size
    if ((($fld[3] >= '0') && ($fld[3] <= '5')) || ($fld[3] eq '12')) {
	$outfld[3] = $font{'0'};
    } else {
	$outfld[3] = $font{'1'};
    }
    # point
    if (($fld[3] eq '3') || ($fld[3] eq '9')) {
	print STDERR 'Font 16 changed to 14 Point';
    }
    $outfld[4] = $point{$fld[3]};
    # layer
    $outfld[5] = $fld[4];
    # color
    $outfld[6] = $color;
}
#
#
##########################################################################
#
# SUBROUTINE
#       write_file
#
# DESCRIPTION
#       Write out all the records that have been constructed
#
##########################################################################
#
sub write_file {

    print XOPPS '$$OPPS';

    if (defined $F_line) {
        print XOPPS $F_line;
    } else {
        print STDERR 'F line is missing';
    }
    if ($#chart_line > 0) {
        foreach $i (0 .. $#chart_line) {
            print XOPPS $chart_line[$i];
        }
    }
    if (defined $C_line) {
        print XOPPS $C_line;
    } else {
        print STDERR 'C line is missing';
    }
    foreach $i (0 .. $#recout) {
        print XOPPS $recout[$i];
    }
    if ($#H_line > 0) {
	foreach $i (0 .. $#H_line) {
            print XOPPS $H_line[$i];
	}
    } else {
        print STDERR 'H line is missing';
    }
    
    print XOPPS '$$EOF';
}

########################################################################
#
# SUBROUTINE:
#       ymd_to_utc
#
# DESCRIPTION:
#       Converts a year-mon-day string to an UTC format
#
########################################################################

sub ymd_to_utc {

    local($year, $month, $day) = @_;

    if ($year % 4) {
	$day += $mndays[$month - 1];
    } else {
	$day += $lpdays[$month - 1];
    }
    $temp = sprintf("%04d-%03d", $year, $day);
}

