#!/bin/ksh
# Erzeugung Stapeldiagramm (Einzelwerte werden gestapelt) als LaTeXdraw-Datei
# Information, die nachfolgend in einer Zeile, muss auch in der
#      Eingabe-Datei in einer Zeile sein 
# Trennzeichen zwischen Eingabeeinheiten in einer Zeile ist der Zwischenraum
# Falls nur eine Einheit in einer Zeile verlangt wird, koennen auch
#      Zwischenraeume in der Einheit sein
# Die eingegebenen Zahlenwerte werden automatisch normalisiert
# Die Zahlenwerte in einer Zeile werden gestapelt
# Eingabe ueber stdin, Ausgabe ueber stdout
# Leerzeilen werden ueberlesen
# Kommentarzeilen (mit # oder % beginnend) werden ueberlesen
# stdin: unterschrift
#        Bezeichnung y-Achse
#        Bezeichnung Spalte 1 (x-Achse) Bezeichnung Spalte 2 usw.
#        text1 werta wertb wertc ...
#        text2 werta wertb wertc ...
#        usw.
#
#        falls Schluesselwort farbig allein in Zeile auftritt,
#           wird farbiges Diagramm erzeugt
#        falls Schluesselwort Folie allein in Zeile auftritt,
#           wird die Schrift als 18pt-Schrift erzeugt 
#           (Makro \FXVIIIpt)
#        falls Schluesselwort Anmerkung allein in einer Zeile
#           auftritt, werden alle folgenden Zeilen als Anmerkungen
#           betrachtet und nach der Bildunterschrift zeilenweise
#           ausgegeben
# stdout:LaTeXdraw-Datei, die in latexdraw eingelesen werden kann
# Stand 6.3.96 Siegert

# Dimension ggf durch xpixel und ypixel aendern
# 
# Farben durch andere Zuweisung von Werten an farbe[] aenderbar
# Farbnummern aus LaTeXdraw
# Farben spaeter auch durch chatt in LaTeXdraw aenderbar
# Farben werden im Diagramm ggf. zyklisch wiederholt
awk 'BEGIN{xpixel=600; xmm=190; ypixel = 300;
           schwarz=0;grau90=2;grau80=3;grau70=4;grau60=5;
           grau50=6;grau40=7;grau30=8;grau20=9; grau10=10;
           rot=11; gruen=29; blau=33; magenta=36;orange=27; 
           gelb=14; cyan=32; hellgruen=44; hellblau=52;
           hellrot=48;
           farbe[1]=schwarz;farbe[2]=grau80;farbe[3]=grau60;
           farbe[4]=grau40;farbe[5]=grau20;farbe[6]=grau90;
           farbe[7]=grau70;farbe[8]=grau50;farbe[9]=grau30;
           farbe[10]=grau10;
           anzfarben=10;
           farbe[11]=gruen;farbe[12]=blau;farbe[13]=rot;
           farbe[14]=magenta;farbe[15]=orange;farbe[16]=cyan;
           farbe[17]=hellgruen;farbe[18]=hellblau;
           farbe[19]=gelb;
           anzffarben=9; 

           x0pixel = 250; y0pixel = 130;
           xupixel= x0pixel-30; yupixel = y0pixel-70;
           schrift=1; anzstapel = 0;  anzteilstapel=0;
           maxwert=0; unterschrift=""; 
           yachse = ""; xachse=""; 
           anzanm=0; istanmerkung = 0; } 
     {if (NF==0) next; 
      if (substr($0,1,1)=="#") next;
      if (substr($0,1,1)=="%") next;
      if (istanmerkung == 1) {anzanm++; anmerkung[anzanm]=$0; next;}
      if ((NF==1)&&($1=="farbig")) {
          for (k=1;k<=anzffarben;k++) farbe[k]=farbe[k+anzfarben];
          anzfarben=anzffarben; next;}
      if ((NF==1)&&($1=="Folie")) {schrift=6; next;}
      if ((NF==1)&&($1=="folie")) {schrift=6; next;}
      if ((NF==1)&&(substr($1,1,9)=="Anmerkung")) {
          istanmerkung = 1; next;}
      if ((NF==1)&&(substr($1,1,9)=="anmerkung")) {
          istanmerkung = 1; next;}

      if (unterschrift=="") {unterschrift = $0; next; }
      if (yachse=="") {yachse = $0; next; }
      if (xachse=="") {xachse = $1; 
          for (s=2;s<=NF;s++) stapelname[s]=$s;
          anzteilstapel = NF; next; }
      anzstapel++;
      text[anzstapel] = $1; anz[anzstapel]=NF; summe = 0;
      for (j=2;j<=NF;j++) {wert[100*anzstapel+j]=$j; summe += $j;}
      if (summe  > max) max = summe; 
      } 
     END{  print "LaTeXdraw (Siegert, TUM, C14.14)Digi";
           printf(" %.3f (TEXFAKTOR) \n", xmm/xpixel );
           print " 2.00000E+00  (TEXDASHLAENGE)";
           print " 1.80000E+00  (TEXDOTGAP)";
           print " 8.00000E-01  (TEXINTERDOTGAP)";
           print " 16.667 16.667 562.800 295.000 1.000 0.000 0.000 1.000  (GITTERWERTE)";
           print " 446 295 547 411 101 116 240 160 1 0 (AUSGABEOPTIONEN)";

           dx = xpixel/2/(anzstapel+1);
           yfaktor = ypixel/max;
           xakt=x0pixel+dx;
           for (k=1;k<=anzstapel;k++) {
             yakt=y0pixel;
             m = anzfarben;
             for (j=2;j<=anz[k];j++) {           
               m++; if (m>anzfarben) m -= anzfarben;
               dy=wert[100*k+j]*yfaktor;
               printf("14 %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f 0 3600 %d01 0 1 0 0 0 \n", \
               xakt,yakt,xakt+dx,yakt+dy,xakt+dx,yakt,xakt,yakt+dy,farbe[m]);
               yakt = yakt+dy;
             }
             yakt=y0pixel;
             printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \
                      xakt,yakt,xakt+dx,yakt);
             for (j=2;j<=anz[k];j++) {           
               dy=wert[100*k+j]*yfaktor;
               printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \
                      xakt,yakt,xakt,yakt+dy);
               printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \
                      xakt+dx,yakt,xakt+dx,yakt+dy);
               printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \
                      xakt,yakt+dy,xakt+dx,yakt+dy);
               yakt = yakt+dy;
             }
             printf("2 %.3f %.3f  0 0 0 0 0 0  0 3600 1 2 %d 2 6 0 \n", \
                      xakt+dx/2,y0pixel-10,schrift);
             print text[k];
             xakt += 2*dx;
           }
           printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 2 1 0 0 0 \n", \
                      x0pixel,y0pixel,x0pixel+xpixel,y0pixel);
           printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 2 1 0 0 0 \n", \
                      x0pixel,y0pixel,x0pixel,y0pixel+ypixel+20);
           f=1; 
           if (max >1) {while (max >f) f = f*10; f=f*0.1; a=max/f;}
           if (max <1) {while (max <f) f = f*0.1;  a=max/f;}
           dy=1; if (a<5) dy = 0.5;
           dypixel = dy*f*yfaktor;
           yaktpixel=0;
           yakt=0;
           while (yaktpixel < (ypixel+10)) {
              printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \
                      x0pixel,y0pixel+yaktpixel,x0pixel-10,y0pixel+yaktpixel);
              printf("2 %.3f %.3f  0 0 0 0 0 0  0 3600 1 2 %d 3 8 0 \n", \
                      x0pixel-15,y0pixel+yaktpixel,schrift);
              printf("%.1f\n",yakt);
              yaktpixel +=dypixel;
              yakt +=dy;
           }
          printf("2 %.3f %.3f  0 0 0 0 0 0  0 3600 1 2 %d 4 0 0 \n", \
                      x0pixel,y0pixel+ypixel+40,schrift);
           if (f > 1) printf("%s (Einheit %d) \n", yachse,f,schrift);
           if (f == 1) print yachse;
           if (f < 1) printf("%s (Einheit 1/%d) \n", yachse,1/f);
           printf("2 %.3f %.3f  0 0 0 0 0 0  0 3600 1 2 %d 4 0 0 \n", \
                   xupixel,yupixel,schrift);
           print unterschrift;

           dy =20;
           yakt=yupixel-dy/2;
           for (j=1;j<=anzanm;j++) {
             yakt -= dy;
             printf("2 %.3f %.3f  0 0 0 0 0 0  0 3600 1 2 %d 4 0 0 \n", \
                     xupixel,yakt,schrift);
             print anmerkung[j]; }

           dy = 20;
           dx = 15;
           xakt=x0pixel+xpixel+5;
           xakttext=xakt+2*dx;
           yakt=y0pixel+2*dy;
           m = anzfarben;
           for (j=2;j<=anzteilstapel;j++) {
             m++; if (m>anzfarben) m -= anzfarben;
             yakt += dy;
             printf("14 %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f 0 3600 %d01 0 1 0 0 0 \n", \
               xakt,yakt,xakt+dx,yakt+dx,xakt+dx,yakt,xakt,yakt+dx,farbe[m]);
             printf("2 %.3f %.3f  0 0 0 0 0 0  0 3600 1 2 %d 4 7 0 \n", \
                     xakttext,yakt+dy/2,schrift);
             print stapelname[j];}

           printf("2 %.3f %.3f  0 0 0 0 0 0  0 3600 1 2 %d 4 0 0 \n", \
                   x0pixel+xpixel+5,y0pixel,schrift);
           print xachse


           print "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ";
           print "0 ";
           print "0 0 ";
           print ;
        }'





