#!/usr/local/dist/bin/perl
#
# ****************************************************************
# LaTeX-Datei, die von latexdraw erzeugt, 
# zurueckwandeln in interne LaTeXdraw-Datei 
# ****************************************************************
# Stand 23.5.1997 Siegert
# 1. Parameter: Name der vorhandenen latex-Datei
# 2. Parameter: Name der erzeugten latexdraw-Datei

$zahl       = "([0-9.+-]*)";
$xy         = "\\($zahl,$zahl\\)";
$klzahl     = "\\{$zahl\\}";
$optzahl    = "\\[$zahl\\]";
$star       = "\\*";
$fontbez    = "\\\\(F[XVIbi]*pt) ";
$unitlength = "\\\\setlength{\\\\unitlength}{$zahl";
$bdoc       = "\\\\begin{document}";
$bpic       = "\\\\begin{picture}$xy";

$ldlinew    = "\\\\ldlinewidth$klzahl$klzahl";
$put        = "\\\\put$xy";
$putc       = "\\\\putc$xy$klzahl";
$rput       = "\\\\rput$optzahl$xy";
$rputc      = "\\\\rputc$optzahl$xy$klzahl";

$line       = "\\\\ldline$xy$xy";
$line2      = "\\\\ldline$optzahl$xy$xy";
$line3      = "\\\\ldcpline$xy$xy";
$line4      = "\\\\ldcpline$optzahl$xy$xy";
$line5      = "\\\\LdpLine$klzahl\\{$xy\\}$optzahl";
$gefdreieck = "\\\\gefdreieck$xy$xy";
$gefviereck = "\\\\gefviereck$xy$xy$xy";
$circle     = "\\\\circle$klzahl";
$circle2    = "\\\\circle$optzahl$klzahl";
$ell        = "\\\\ellipse$klzahl$klzahl";
$ell2       = "\\\\ellipse$optzahl$klzahl$klzahl";
$gefcircle  = "\\\\circle$star$klzahl";
$gefell     = "\\\\ellipse$star$klzahl$klzahl";
$arc        = "\\\\arc$klzahl$klzahl$klzahl";
$arc2       = "\\\\arc$optzahl$klzahl$klzahl$klzahl";
$arc3       = "\\\\LdpArc$klzahl$klzahl$klzahl$optzahl$klzahl";
$ellarc     = "\\\\ellarc$klzahl$klzahl$klzahl$klzahl";
$ellarc2    = "\\\\ellarc$optzahl$klzahl$klzahl$klzahl$klzahl";
$ellarc3    = "\\\\LdpEllarc$klzahl$klzahl$klzahl$optzahl$klzahl$klzahl";
$pie        = "\\\\pieslice$klzahl$klzahl$klzahl$klzahl";
$bezier     = "\\\\bezier$xy$xy$xy";
$bezier2    = "\\\\bezier$optzahl$xy$xy$xy";
$bezier3    = "\\\\LdpBezier$klzahl$xy$xy$xy$optzahl";
$gefbezier  = "\\\\beziergef$xy$xy$xy";

$text     = "\\\\makebox\\(0,0\\)\\[([a-z]+)\\]{";
$textf    = "\\\\makebox\\(0,0\\){";

$standardfont = 1;
$textlage{'bl'} = 0;
$textlage{'f'}  = 1;
$textlage{'br'} = 2;
$textlage{'b'}  = 3;
$textlage{'tl'} = 4;
$textlage{'tr'} = 5;
$textlage{'t'}  = 6;
$textlage{'l'}  = 7;
$textlage{'r'}  = 8;


$font{'FVIpt'} = 0;
$font{'FVIIIpt'} = 2;
$font{'FXpt'} = 3;
$font{'FXIIpt'} = 4;
$font{'FXIVpt'} = 5;
$font{'FXVIIIpt'} = 6;

$font{'FVIbpt'} = 7;
$font{'FVIIIbpt'} = 8;
$font{'FXbpt'} = 9;
$font{'FXIIbpt'} = 10;
$font{'FXIVbpt'} = 11;
$font{'FXVIIIbpt'} = 12;

$font{'FVIipt'} = 13;
$font{'FVIIIipt'} = 14;
$font{'FXipt'} = 15;
$font{'FXIIipt'} = 16;
$font{'FXIVipt'} = 17;
$font{'FXVIIIipt'} = 18;


$ttext          = 2; 
$tgerade        = 3;
$tkreis         = 5;
$tkreisgef      = 6;
$tkreisbogen    = 7;
$tell           = 8;
$tellgef        = 9;
$tellbogen      = 10;
$trechteckgef   = 11;
$tbezier        = 12;
$tdreieckgef    = 13;
$tviereckgef    = 14;
$tkreissektorgef= 15;
$tellsektorgef  = 16;
$tbeziergef     = 17;



if ($#ARGV != 1) {die "number of arguments not 2 (file in, file out)";}

sub grad { # texwinkel nach latexdraw-Winkel (math)
    $wi = @_[0];
    $wi = (1-$wi/(2*3.1415926))*3600;
    if (($wi > 3599.9)&&($wi < 3600.1)) {$wi=3600;}
    if (($wi > -0.1) && ($wi < 0.1)) {$wi=0;}
    while ($wi > 3600) {$wi = $wi - 3600;}
    while ($wi < 0)  {$wi = $wi + 3600;}
    $wi;
}

sub winkel { # Berechnung Anfangs - und Endwinkel
    $endwi = grad(@_[0]);
    $anfwi = grad(@_[1]);
}

sub vorspannpar { # vorspannparameter merken
    $xxmin =0;
    $yymin=0;
    $xxmax=$1;
    $yymax=$2;
    $dxpixel = $1;
    $dypixel = $2;
    $breite = $xxmax*$unitl;
    $hoehe = $yymax*$unitl;
    $querformat = 1;
    if ($anzpic == 2) {$querformat = 0;}
}

sub ausvorspann {# vorspann ausgeben
    print AUS "LaTeXdraw (Siegert, TUM, C15.13)\n";
    print AUS  $unitl, "  (TEXFAKTOR)", "\n";
    print AUS  " 2.00000E+00  (TEXDASHLAENGE)", "\n";
    print AUS  " 1.80000E+00  (TEXDOTGAP)", "\n";
    print AUS  " 8.00000E-01  (TEXINTERDOTGAP)", "\n";
    print AUS  "16.667 16.667 525.2 294 1 0 0 1  (GITTERWERTE)\n";
    print AUS  "$xxmin $yymin $xxmax $yymax $dxpixel $dypixel ",
    "$breite $hoehe $mitdoc $querformat (AUSGABEOPTIONEN)\n";
    $ausgegeben = 1;
}

sub zeileninit {
    $element = 0; # falls Zeichnungselement gefunden = 1
    $rotwinkel  = 0;
    $lende = 0;
    $ltype = 1;
    $anfwi = 0;
    $endwi = 0;
    $laenge1 = 0;
    $laenge2 = 0;
    $x2 = 0;
    $y2 = 0;
    $xb1 = 0;
    $yb1 = 0;
    $xb2 = 0;
    $yb2 = 0;
}

open (EIN, "<$ARGV[0]")|| die "can't open input file $ARGV[0]";
open (AUS, ">$ARGV[1]")|| die "can't open output file $ARGV[1]";
  
$lwidth  = 1;
$unitl   = 1;
$anzpic = 0;
$ausgegeben = 0;
$mitdoc = 0;
while (<EIN>) { #zeilenweise Eingabe in $_

    zeileninit();
    if (/$bdoc/) {$mitdoc = 1;}
    if (/$unitlength/) {$unitl = $1;}
    if ((/$bpic/x)&&($ausgegeben ==0)) {$anzpic = $anzpic + 1; vorspannpar(); }
    if (/$ldlinew/) {$lwidth  = $1;}
    if (/$put/)  {$x1 = $1; $y1 = $2;  $color   = 0;}
    if (/$putc/) {$x1 = $1; $y1 = $2;  $color = $3;}
    if (/$rput/) {$rotwinkel = grad($1); $x1 = $2; $y1 = $3; $color = 0;}
    if (/$rputc/){$rotwinkel = grad($1); $x1 = $2; $y1 = $3; $color = $4;}

    if (/$text/) { # Text mit Lageangabe
        $typ = $ttext;
	$laenge2 = $textlage{$1};
	$ltype = $standardfont;
	$_ = $';
	if (/$fontbez/) {$ltype = $font{$1};}
        $TEXT = substr($',0,length($')-3);
        $element = 1;
    }

    if (/$textf/) { # Text ohne Lageangabe
        $typ = $ttext;
	$laenge2 = $textlage{'f'};
	$ltype = $standardfont;
	$_ = $';
	if (/$fontbez/) {$ltype = $font{$1};}
        $TEXT = substr($',0,length($')-3);
        $element = 1;
    }

    if (/$line/) {
        $typ = $tgerade;
	$x2 = $x1+$3;
	$y2 = $y1+$4;
	$element = 1;
    }

    if (/$line2/) {
        $typ = $tgerade;
	$ltype = $1;
	$x2 = $x1+$4;
	$y2 = $y1+$5;
	$element = 1;
    }

    if (/$line3/) { # cap projecting
        $typ = $tgerade;
	$lende = 4;
	$x2 = $x1+$3;
	$y2 = $y1+$4;
	$element = 1;
    }

    if (/$line4/) { # cap projecting
        $typ = $tgerade;
	$lende = 4;
	$ltype = $1;
	$x2 = $x1+$4;
	$y2 = $y1+$5;
	$element = 1;
    }

    if (/$line5/) { # LdpLine
        $typ = $tgerade;
	$lende = $1;
	$x2 = $x1+$2;
	$y2 = $y1+$3;
	$ltype = $4;
	$element = 1;
    }


    if (/$circle/) {
        $typ = $tkreis;
	$laenge1 = $1/2;
	$laenge2 = $laenge1;
        $element = 1;
    }

    if (/$circle2/) {
        $typ = $tkreis;
        $ltype = $1;
	$laenge1 = $2/2;
	$laenge2 = $laenge1;
        $element = 1;
    }

    if (/$gefcircle/) {
        $typ = $tkreisgef;
	$laenge1 = $1/2;
	$laenge2 = $laenge1;
        $element = 1;
    }

    if (/$arc/) {
        $typ = $tkreisbogen;
	$laenge1 = $1/2;
	$laenge2 = $laenge1;
        winkel($2,$3);
        $element = 1;
    }

    if (/$arc2/) {
        $typ = $tkreisbogen;
	$ltype = $1;
	$laenge1 = $2/2;
	$laenge2 = $laenge1;
        winkel($3,$4);
        $element = 1;
    }

    if (/$arc3/) {
        $typ = $tkreisbogen;
	$lende = $1;
        winkel($2,$3);
	$ltype = $4;
	$laenge1 = $5/2;
	$laenge2 = $laenge1;
        $element = 1;
    }

    if (/$ell/) {
        $typ = $tell;
	$laenge1 = $1/2;
	$laenge2 = $2/2;
        $element = 1;
    }

    if (/$ell2/) {
        $typ = $tell;
	$ltype = $1;
	$laenge1 = $2/2;
	$laenge2 = $3/2;
        $element = 1;
    }

    if (/$gefell/) {
        $typ = $tellgef;
	$laenge1 = $1/2;
	$laenge2 = $2/2;
        $element = 1;
    }

    if (/$ellarc/) {
        $typ = $tellbogen;
	$laenge1 = $1/2;
	$laenge2 = $2/2;
        winkel($3,$4);
        $element = 1;
    }

    if (/$ellarc2/) {
        $typ = $tellbogen;
	$ltype = $1;
	$laenge1 = $2/2;
	$laenge2 = $3/2;
        winkel($4,$5);
        $element = 1;
    }

    if (/$ellarc3/) {
        $typ = $tellbogen;
	$lende = $1;
        winkel($2,$3);
	$ltype = $4;
	$laenge1 = $5/2;
	$laenge2 = $6/2;
        $element = 1;
    }

    if (/$gefdreieck/) {
        $typ = $tdreieckgef;
	$x2 = $x1+$1;
	$y2 = $y1+$2;
	$xb1 = $x1+$3;
	$yb1 = $y1+$4;
        $element = 1;
    }

    if (/$gefviereck/) {
        $typ = $tviereckgef;
	$xb1 = $x1+$1;
	$yb1 = $y1+$2;
	$x2 = $x1+$3;
	$y2 = $y1+$4;
	$xb2 = $x1+$5;
	$yb2 = $y1+$6;
        $element = 1;
    }

    if (/$pie/) {
        $typ = $tellsektorgef;
	$laenge1 = $1/2;
	$laenge2 = $2/2;
	if ($laenge1 == $laenge2) {$typ = $tkreissektorgef;}
	$anfwi = $3*10;
        $endwi = $4*10;
        $element = 1;
    }
 
    if (/$bezier/) {
	$typ = $tbezier;
	$xb1 = $x1+$1;
	$yb1 = $y1+$2;
	$xb2 = $x1+$3;
	$yb2 = $y1+$4;
	$x2 = $x1+$5;
	$y2 = $y1+$6;
        $element = 1;
    }
 
    if (/$bezier2/) {
	$typ = $tbezier;
	$ltype = $1;
	$xb1 = $x1+$2;
	$yb1 = $y1+$3;
	$xb2 = $x1+$4;
	$yb2 = $y1+$5;
	$x2 = $x1+$6;
	$y2 = $y1+$7;
        $element = 1;
    }

    if (/$bezier3/) {
	$typ = $tbezier;
	$lende = $1;
	$xb1 = $x1+$2;
	$yb1 = $y1+$3;
	$xb2 = $x1+$4;
	$yb2 = $y1+$5;
	$x2 = $x1+$6;
	$y2 = $y1+$7;
	$ltype = $8;
	$element = 1;
    }

    if (/$gefbezier/) {
	$typ = $tbeziergef;
	$xb1 = $x1+$1;
	$yb1 = $y1+$2;
	$xb2 = $x1+$3;
	$yb2 = $y1+$4;
	$x2 = $x1+$5;
	$y2 = $y1+$6;
        $element = 1;
    }

    if ($element) {
	if ($ausgegeben==0) {ausvorspann();}
        $tmp = 100 * $color + $lwidth;
	print AUS  "$typ $x1 $y1 $x2 $y2  $xb1 $yb1 $xb2 $yb2 $anfwi $endwi ", 
	"$tmp $lende $ltype $laenge1 $laenge2 $rotwinkel", "\n";
	if ($typ == 2) {print AUS "$TEXT\n";}
    }
}


print AUS "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n";
print AUS " 0 \n";
print AUS "0 0\n";