#
#  dtp2tex
#
#  Command line : dtp2tex dtpfile prologfile epilogfile texfile variablefile
#
$DTPFile = @ARGV[ 0];    # Command line argumente uebernehmen
$PROFile = @ARGV[ 1];
$EPIFile = @ARGV[ 2];
$TEXFile = @ARGV[ 3];
$VARFile = @ARGV[ 4];

$va = 0;       # 1 if in variable
$uf = 0;       # 1 if text should not be modified; unformatted text
$ufempty = 0;  # indicates if an unformatted text block is empty
$ft = 0;       # 1 if text should be modified; formatted text
$ftempty = 0;  # indicates if an formatted text block is empty

open( OUTFILE, ">$TEXFile");
open( OUTVAR, ">$VARFile");

$COPFile = $PROFile;    # Prolog uebernehmen
do cop_file();
do transform_report();  # DTP File umsetzen
$COPFile = $EPIFile;    # Epilog uebernehmen
do cop_file();

close( OUTFILE);
close( OUTVAR);
exit;


#
# Inhalt eines Files uebernehmen; insb. Prolog und Epilog
#
sub cop_file
    {
    open( INFILE, $COPFile);
    while( <INFILE>)
	{
	print( OUTFILE $_ );
	}
    close( INFILE);
    }

#
# Umsetztabelle
#
sub transform_report
    {
    open( INFILE, $DTPFile);
    while( <INFILE>)
	{
	if( m/<HL1>/)
	    {
	    s/<HL1>//;
            $_ = do transform_string( $_);
	    chop;
	    print( OUTFILE "\\clearpage\n");
	    print( OUTFILE "\\section{$_}\n");
	    }
	elsif( m/<HL2>/)
	    {
	    s/<HL2>//;
            $_ = do transform_string( $_);
	    chop;
	    print( OUTFILE "\\subsection{$_}\n");
	    }
	elsif( m/<HL3>/)
	    {
	    s/<HL3>//;
            $_ = do transform_string( $_);
	    chop;
	    print( OUTFILE "\\subsubsection{$_}\n");
	    }
	elsif( m/<CH>/)
	    {
	    s/<CH>//;
	    chop;
	    print( OUTFILE "\\macincgra{$_}\n");
	    }
	elsif( m/<BSC>/)
	    {
	    s/<BSC>//;
	    chop;
	    print( OUTFILE "\\mbox{\\tt \\mbox{}~~~~~~~~~}\\begin{minipage}{25em} \\vskip0.5ex \n");
	    }
	elsif( m/<ESC>/)
	    {
	    s/<ESC>//;
	    chop;
	    print( OUTFILE "\\end{minipage}\\\\[0.8ex]\n");
	    }
	elsif( m/<BFT>/)
	    {
	    $ft = 1;
	    $ftempty = 1;
	    }
	elsif( m/<EFT>/)
	    {
	    if( $ftempty == 0)
		{
	        $ftempty = 1;
		}
	    $ft = 0;
	    }
	elsif( m/<BUT>/)
	    {
	    $uf = 1;
	    $ufempty = 1;
	    }
	elsif( m/<EUT>/)
	    {
	    if( $ufempty == 0)
		{
	        chop;
	        print( OUTFILE "\\end{flushleft}\n}\n");
	        $ufempty = 1;
		}
	    $uf = 0;
	    }
	elsif( m/<EMLF>/)
	    {
	    if( ($ft == 1) && ( $ftempty == 1))
	        {
                $ftempty = 0;
	        }
	    if( ($uf == 1) && ( $ufempty == 1))
	        {
                print( OUTFILE "{\\tt\n\\begin{flushleft}\n");
                $ufempty = 0;
	        }
	    s/<EMLF>//;
            $_ = do transform_string( $_);
	    chop;
	    print( OUTFILE "{\\bf $_ \\\\}\n");
	    }
	elsif( m/<EM>/)
	    {
	    if( ($ft == 1) && ( $ftempty == 1))
	        {
                $ftempty = 0;
	        }
	    if( ($uf == 1) && ( $ufempty == 1))
	        {
                print( OUTFILE "{\\tt\n\\begin{flushleft}\n");
                $ufempty = 0;
	        }
	    s/<EM>//;
            $_ = do transform_string( $_);
	    chop;
	    print( OUTFILE "{\\bf $_ }\n");
	    }
	elsif( m/<VAR>/)
	    {
	    s/<VAR>//;
	    chop;
	    $va = 1;
            $_ = do transform_string( $_);
	    $va = 0;
	    print( OUTVAR "\\def\\$_\n");
	    }
	else
	    {
	    local( @lll) = split( //, $_);
	    if( ($lll[ 0] ne "\n") || ( $ft == 1))
		{
		if( ($ft == 1) && ( $ftempty == 1))
		    {
	            $ftempty = 0;
		    }
		if( ($uf == 1) && ( $ufempty == 1))
		    {
	            print( OUTFILE "{\\tt\n\\begin{flushleft}\n");
	            $ufempty = 0;
		    }
                $_ = do transform_string( $_);
	        s/BBBBBBBBBB/{\\it /g;
	        s/EEEEEEEEEE/ }/g;
	        print( OUTFILE $_);
		}
	    }
	}
    close( INFILE);
    }

sub transform_string
	{
	local( $line) = pop( @_);
        local( @chars) = split( //, $line);
        foreach $ch (@chars)
            {
            if( $ch eq '%')             { $ch = '\\%'; }
            elsif( $ch eq '"')          { $ch = '"'; }
            elsif( $ch eq '_')          { if( $va == 0)
					      { $ch = '{\\macund}'; }
					  else
					      { $ch = '\\_'; }
					}
            elsif( $ch eq '#')          { $ch = '\\#'; }
            elsif( $ch eq '$')          { $ch = '\\$'; }
            elsif( $ch eq '&')          { $ch = '\\&'; }
            elsif( $ch eq '\\')         { $ch = '$\\backslash$'; }
            elsif( $ch eq '{')          { if( $va)
					      { $ch = '{'}
					  else
					      { $ch = '\\{'; }
					}
            elsif( $ch eq '}')          { if( $va)
					      { $ch = '}'}
					  else
					      { $ch = '\\}'; }
					}
            elsif( $ch eq '~')          { $ch = '\\~{}'; }
            elsif( $ch eq '^')          { $ch = '\\^{}'; }
            elsif( $ch eq '-')          { $ch = '{-}'; }
            elsif( $ch eq '>')          { $ch = '$>$'; }
            elsif( $ch eq '<')          { $ch = '$<$'; }
            elsif( $ch eq '|')          { $ch = '$|$'; }
            elsif( $ch eq '[')          { $ch = '{[}'; }
            elsif( $ch eq ']')          { $ch = '{]}'; }
            elsif( $ch eq '*')          { $ch = '$\\ast$'; }
            elsif( $ch eq "\n")         { if( $uf)
					      { $ch = "\\\\\n"; }
					  if( $ft)
					      { $ch = "{\\macus}\\\\\n"; }
					}
            elsif( $ch eq "\t")         { if( $ft)
					      { $ch = '{\\macus}{\\macus}'; }
					}
            elsif( $ch eq " ")          { if( $uf || $ft)
					      { $ch = '{\\macus}'; }
# 					  else
# 					      { $ch = '{\\macfs}'; }
					}
            elsif( $ch eq "\xa1")       { $ch = '!`'; }
            elsif( $ch eq "\xa2")       { $ch = ''; }
            elsif( $ch eq "\xa3")       { $ch = '\\pounds'; }
            elsif( $ch eq "\xa4")       { $ch = ''; }
            elsif( $ch eq "\xa5")       { $ch = ''; }
            elsif( $ch eq "\xa6")       { $ch = ''; }
            elsif( $ch eq "\xa7")       { $ch = ''; }
            elsif( $ch eq "\xa8")       { $ch = ''; }
            elsif( $ch eq "\xa9")       { $ch = '\\copyright'; }
            elsif( $ch eq "\xaa")       { $ch = ''; }
            elsif( $ch eq "\xab")       { $ch = '$\\ll$'; }
            elsif( $ch eq "\xac")       { $ch = ''; }
            elsif( $ch eq "\xad")       { $ch = ''; }
            elsif( $ch eq "\xae")       { $ch = ''; }
            elsif( $ch eq "\xaf")       { $ch = ''; }
            elsif( $ch eq "\xb0")       { $ch = ''; }
            elsif( $ch eq "\xb1")       { $ch = ''; }
            elsif( $ch eq "\xb2")       { $ch = ''; }
            elsif( $ch eq "\xb3")       { $ch = ''; }
            elsif( $ch eq "\xb4")       { $ch = ''; }
            elsif( $ch eq "\xb5")       { $ch = '$\\mu$'; }
            elsif( $ch eq "\xb6")       { $ch = ''; }
            elsif( $ch eq "\xb7")       { $ch = ''; }
            elsif( $ch eq "\xb8")       { $ch = ''; }
            elsif( $ch eq "\xb9")       { $ch = ''; }
            elsif( $ch eq "\xba")       { $ch = ''; }
            elsif( $ch eq "\xbb")       { $ch = '$\\gg$'; }
            elsif( $ch eq "\xbc")       { $ch = ''; }
            elsif( $ch eq "\xbd")       { $ch = ''; }
            elsif( $ch eq "\xbe")       { $ch = ''; }
            elsif( $ch eq "\xbf")       { $ch = '?\`'; }
            elsif( $ch eq "\xc0")       { $ch = '\\`A'; }
            elsif( $ch eq "\xc1")       { $ch = '\\\'A'; }

            if( $ch eq "\xc2")          { $ch = '\\^A'; }
            elsif( $ch eq "\xc3")       { $ch = '\\~A'; }
            elsif( $ch eq "\xc4")       { $ch = '\\"A'; }
            elsif( $ch eq "\xc5")       { $ch = '{\\AA}'; }
            elsif( $ch eq "\xc6")       { $ch = '{\\AE}'; }
            elsif( $ch eq "\xc7")       { $ch = '\\c{C}'; }
            elsif( $ch eq "\xc8")       { $ch = '\\`E'; }
            elsif( $ch eq "\xc9")       { $ch = '\\\'E'; }
            elsif( $ch eq "\xca")       { $ch = '\\^E'; }
            elsif( $ch eq "\xcb")       { $ch = '\\H{E}'; }
            elsif( $ch eq "\xcc")       { $ch = '\\`I'; }
            elsif( $ch eq "\xcd")       { $ch = '\\\'I'; }
            elsif( $ch eq "\xce")       { $ch = '\\^I'; }
            elsif( $ch eq "\xcf")       { $ch = '\\H{I}'; }
            elsif( $ch eq "\xd0")       { $ch = ''; }
            elsif( $ch eq "\xd1")       { $ch = ''; }
            elsif( $ch eq "\xd2")       { $ch = '\\`O'; }
            elsif( $ch eq "\xd3")       { $ch = '\\\'O'; }
            elsif( $ch eq "\xd4")       { $ch = '\\^O'; }
            elsif( $ch eq "\xd5")       { $ch = '\\~O'; }
            elsif( $ch eq "\xd6")       { $ch = '\\"O'; }
            elsif( $ch eq "\xd7")       { $ch = '$\\times$'; }
            elsif( $ch eq "\xd8")       { $ch = '{\\O}'; }
            elsif( $ch eq "\xd9")       { $ch = '\\`U'; }
            elsif( $ch eq "\xda")       { $ch = '\\\'U'; }
            elsif( $ch eq "\xdb")       { $ch = '\\^U'; }
            elsif( $ch eq "\xdc")       { $ch = '\\"U'; }
            elsif( $ch eq "\xdd")       { $ch = '\\\'Y'; }
            elsif( $ch eq "\xde")       { $ch = ''; }
            elsif( $ch eq "\xdf")       { $ch = '{\\ss}'; }
            elsif( $ch eq "\xe0")       { $ch = '\\`a'; }
            elsif( $ch eq "\xe1")       { $ch = '\\\'a'; }
            elsif( $ch eq "\xe2")       { $ch = '\\^a'; }
            elsif( $ch eq "\xe3")       { $ch = '\\~a'; }
            elsif( $ch eq "\xe4")       { $ch = '\\"a'; }
            elsif( $ch eq "\xe5")       { $ch = '{\\aa}'; }
            elsif( $ch eq "\xe6")       { $ch = '{\\ae}'; }
            elsif( $ch eq "\xe7")       { $ch = '\\c{c}'; }
            elsif( $ch eq "\xe8")       { $ch = '\\`e'; }
            elsif( $ch eq "\xe9")       { $ch = '\\\'e'; }
            elsif( $ch eq "\xea")       { $ch = '\\^e'; }
            elsif( $ch eq "\xeb")       { $ch = '\\H{e}'; }
            elsif( $ch eq "\xec")       { $ch = '\\`\\i'; }
            elsif( $ch eq "\xed")       { $ch = '\\\'\\i'; }
            elsif( $ch eq "\xee")       { $ch = '\\^\\i'; }
            elsif( $ch eq "\xef")       { $ch = '\\H{\\i}'; }
            elsif( $ch eq "\xf0")       { $ch = ''; }
            elsif( $ch eq "\xf1")       { $ch = '\\~n'; }
            elsif( $ch eq "\xf2")       { $ch = '\\`o'; }
            elsif( $ch eq "\xf3")       { $ch = '\\\'o'; }
            elsif( $ch eq "\xf4")       { $ch = '\\^o'; }
            elsif( $ch eq "\xf5")       { $ch = '\\~o'; }
            elsif( $ch eq "\xf6")       { $ch = '\\"o'; }
            elsif( $ch eq "\xf7")       { $ch = '$\\div$'; }
            elsif( $ch eq "\xf8")       { $ch = '{\\o}'; }

            if( $ch eq "\xf9")          { $ch = '\\`u'; }
            elsif( $ch eq "\xfa")       { $ch = '\\\'u'; }
            elsif( $ch eq "\xfb")       { $ch = '\\^u'; }
            elsif( $ch eq "\xfc")       { $ch = '\\"u'; }
            elsif( $ch eq "\xfd")       { $ch = '\\\'y'; }
            elsif( $ch eq "\xfe")       { $ch = ''; }
            elsif( $ch eq "\xff")       { $ch = '\\H{y}'; }
            }
        $line = join( '', @chars);
	}
