(**********************************************************************
Received: from DGOGWDG1 by DGOGWDG1.BITNET (Mailer R2.07) with BSMTP id 6886;
 Fri, 26 Jul 91 19:02:21 MSZ
Received: from mars.gwdg.de by ibm.gwdg.de (IBM VM SMTP R1.2.2MX) with TCP; Fri,
 26 Jul 91 19:02:17 MSZ
Received: by mars.gwdg.de (5.51.2/Apollo-Domain/OS-SR10.1)
        id AA05383; Fri, 26 Jul 91 19:02:39 +0100
Date: Fri, 26 Jul 91 19:02:39 +0100
From: frerichs@mars.gwdg.de (Martin Frerichs)
Message-Id: <9107261802.AA05383@mars.gwdg.de>
To: I2010506@dbstu1.bitnet
***********************************************************************)
PROGRAM PicTeX;
 
Label 9999;
 
CONST Debug = False;
 
TYPE styp = (right,left);
     byte = 0..255;
     var_string = varying[256] of char;
 
VAR aus                                                             : text;
    ausn,oben,unten,rechts,links,eingabe,ausgabe,
    savename,savekomm,unterschrift,labelstr,ueberschrift            :
 var_string;
    unitx,unity, xmax,xmin,ymax,ymin,dx,dy,dxsub,dysub,breite,hoehe,
    unitry,rymin,rymax,rdy,rdysub                                   : real;
    fertig,rechteachse,xlog,ylog,rylog,xkreuz,ykreuz,rykreuz        : boolean;
    replot,finalplot                                                : boolean;
    ydez,xdez,rydez                                                 : byte;
    ch,sprache                                                      : char;
    seite                                                           : styp;
 
PROCEDURE read_value_eof(VAR datei : text; VAR wert : real; VAR Ende : boolean);
BEGIN
  Ende := eof(datei);
  IF not Ende THEN
    BEGIN
      read(datei,wert);
      Ende := eof(datei);
    END;
  END;
 
(****************************************************************************)
(* Zehner-Logarithmus von 'x':                                              *)
 
FUNCTION lg(x: real): real;
 
CONST rez_ln_10 = 0.4342944819;             (* rez_ln_10 = 1 / ln(10) *)
 
BEGIN
  lg :=0;
  IF x > 0.0 THEN
    lg := Ln(x) * rez_ln_10
  ELSE
    writeln('Argumentfehler: lg(x): x <= 0 !!!')
END;
 
(****************************************************************************)
(* Berechnung von 'x hoch y':                                               *)
 
FUNCTION x_hoch_y (x, y: real): real;
 
VAR ganz_y: InTEGER;
 
BEGIN
  IF (x <> 0.0) OR (y <> 0.0) THEN
    IF x > 0.0 THEN
      x_hoch_y := Exp(y * Ln(x))
    ELSE
      BEGIN
        ganz_y := Trunc(y);
        IF ABS(y) <> ABS(ganz_y) THEN
          writeln('x_hoch_y(x,y): nur ganzzahlige Exponenten zulaessig bei x<0')
        ELSE
          IF x <> 0.0 THEN
            IF (ganz_y MOD 2) = 0 THEN
              x_hoch_y :=  Exp(Ln(ABS(x)) * y)
            ELSE
              x_hoch_y := -Exp(Ln(ABS(x)) * y)       (* ungerader Exponent *)
          ELSE
            x_hoch_y := 0
      END
  ELSE
    writeln('x_hoch_y(x,y): x = 0 und y = 0')
END;
 
(****************************************************************************)
 
 
(****************************************************************************)
PROCEDURE process_file(seite : styp;
                       VAR fertig : boolean;
                       rechteachse,xlogar,ylogar : boolean;
                       VAR aus : text);
 
CONST b1='BEGIN';
      e1='END';
 
VAR einn,symbol,test : var_string;
    symbolcount,cur  : integer;
    ein              : text;
    anzahl           : integer32;
    ch               : char;
    sym,linie,quadratic,clipping,Ende : boolean;
    x,y,xa,ya        : real;
 
  FUNCTION betest(t,v : var_string): boolean;
  VAR t1 : var_string;
       i : byte;
  BEGIN
    t1.length := 0;
    FOR i:=1 TO t.length DO
      IF t.body[i] <> ' ' THEN
        BEGIN
          t1.body[i]:= t.body[i];
          t1.length := t1.length + 1
        END;
    IF t1 = v THEN
      betest := true
    ELSE
      betest :=false
  END;
 
BEGIN {of process_file}
  writeln('Ende durch leere Eingabe !!');
  REPEAT
    write('Daten -Datei (TechPlot-Format!!) : ');
    readln(einn);
    IF einn='' THEN
      fertig := true
    ELSE
      fertig := false;
    IF not fertig THEN
      BEGIN
        anzahl := 0;
        open(ein,einn,'OLD');
        REPEAT
          write('mit Plotsymbol      (j/n) ? ');
          readln(ch);
        UNTIL ((ch='j') or (ch='n'));
        IF ch='j' THEN
          sym := true
        ELSE
          sym := false;
        REPEAT
          write('durchgezogene Linie (j/n) ? ');
          readln(ch);
        UNTIL ((ch='j') or (ch='n'));
        IF ch='j' THEN
          linie := true
        ELSE
          linie := false;
        IF linie THEN
          BEGIN
            REPEAT
              write('Quadratische Interpolation (1) oder Polygonzug (2) ? ');
              readln(ch);
            UNTIL ((ch='1') or (ch='2'));
            IF ch='1' THEN
              quadratic := true
            ELSE
              quadratic := false;
            REPEAT
              write('Clipping noetig (Achtung, das dauert lange) (j/n) ? ');
              readln(ch);
            UNTIL ((ch='j') or (ch='n'));
            IF ch='j' THEN
              clipping := true
            ELSE
              clipping := false;
          END;
        IF sym THEN
          BEGIN
            write('Plotsymbol (LaTeX-Text) : ');
            readln(symbol);
            REPEAT
              write('Plotsymbol jeden n-ten Punkt : n = ');
              readln(symbolcount)
            UNTIL symbolcount > 0;
            reset(ein);
            writeln(aus,'%Datei ',einn,' (Symbole)');
            REPEAT
              readln(ein,test);
              writeln(aus,'%% ',test);
            UNTIL ((betest(test,b1)) or eof(ein));
            Ende := false;
            IF eof(ein) THEN
              Ende := true;
              write(aus,'% Daten fuer ');
              IF rechteachse THEN
                IF (seite=left) THEN
                  write(aus,'linke ')
                ELSE
                  write (aus,'rechte ');
              writeln(aus,'y-Achse ...');
              IF NOT Ende THEN
                BEGIN
                  writeln('\multiput {',symbol,'} at ');
                  writeln(aus,'\multiput {',symbol,'} at  %');
                END;
              cur := 0;
              WHILE NOT Ende DO
                BEGIN
                  read_value_eof(ein,x,Ende);
                  read_value_eof(ein,y,Ende);
                  IF NOT Ende THEN
                    BEGIN
                      readln(ein);
                      anzahl := anzahl + 1;
                      cur    := cur + 1;
                      IF xlogar THEN
                        x:=lg(x);
                      IF ylogar THEN
                        y:=lg(y);
                      IF (cur MOD symbolcount) = 0 THEN
                        BEGIN
                          writeln(aus,'  ',x:8:6,' ',y:8:6,' %');
                          writeln(         x:8:5,' ',y:8:4)
                        END
                    END
                  ELSE
                    BEGIN
                      writeln(' /');
                      writeln(aus,' /');
                    END;
                END;
          END;
        IF linie THEN
          BEGIN
            reset(ein);
            anzahl := 0;
            writeln(aus,'%Datei ',einn,' (Linie)');
            REPEAT
              readln(ein,test);
              writeln(aus,'%% ',test);
            UNTIL ((betest(test,b1)) or eof(ein));
            Ende := false;
            IF eof(ein) THEN
              Ende := true;
            IF replot THEN
              BEGIN
                writeln(aus,'\ifreplot');
                writeln(aus,'\else')
              END;
            IF clipping THEN
              writeln(aus,'\inboundscheckon');
            IF quadratic THEN
              writeln(aus,'\setquadratic')
            ELSE
              writeln(aus,'\setlinear');
            writeln(aus,'\plot ');
            WHILE NOT Ende DO
              BEGIN
                read_value_eof(ein,x,Ende);
                read_value_eof(ein,y,Ende);
                IF not Ende THEN
                  BEGIN
                    readln(ein);
                    anzahl := anzahl + 1;
                    IF xlogar THEN
                      x:=lg(x);
                    IF ylogar THEN
                      y:=lg(y);
                    xa :=x;
                    ya :=y;
                    writeln(aus,'  ',x:8:6,' ',y:8:6,' %');
                    writeln(         x:8:4,' ',y:8:4);
                  END;
              END;
            IF quadratic THEN
              IF not odd(anzahl) THEN
                writeln(aus,'  ',xa*1.00001:8:6,' ',ya*1.00001:8:6,' %');
            writeln(aus,'/');
            IF clipping THEN
              writeln(aus,'\inboundscheckoff');
            IF replot THEN
              writeln(aus,'\fi')
          END;
        close(ein);
      END
  UNTIL fertig
END; {of process_file}
 
PROCEDURE Einheiten(VAR unitx,unity,unitry : real; breite,hoehe : real;
                    rechteachse,xlog,ylog,rylog : boolean);
BEGIN
  IF xlog THEN
    unitx := breite/(lg(xmax)-lg(xmin))
  ELSE
    unitx := breite/(xmax-xmin);
  IF ylog THEN
    unity := HOEHE/(lg(ymax)-lg(ymin))
  ELSE
    unity := hoehe/(ymax-ymin);
  IF rechteachse THEN
    IF rylog THEN
      unitry := hoehe/(lg(rymax)-lg(rymin))
    ELSE
      unitry := hoehe/(rymax-rymin)
  ELSE unitry :=0;
END;
 
PROCEDURE Skala (VAR aus : text; seite : styp; unitx,unity : real;
                 xlog,ylog,rechteachse,xkreuz,ykreuz : boolean;
                 xmin,xmax,dx,dxsub,ymin,ymax,dy,dysub : real;
                 xdez,ydez :byte; unten,oben,rechts,links : var_string);
VAR con: text;
 
  PROCEDURE Log_schrift(VAR aus: text; min,max : real;
                        markiere,kreuz : boolean);
  VAR ort,o2    : real;
      expo,code : integer;
      stellen,i : byte;
      ex        : var_string;
  BEGIN
    IF Debug THEN
      BEGIN
        writeln;
        writeln('Log_Schrift: Parameter');
        writeln('Minimum : ',min );
        writeln('Maximum : ',max )
      END;
    writeln(aus,' ticks logged  ');
    IF kreuz THEN
      write(aus,'andacross ');
    IF markiere THEN
      writeln(aus,'numbered ')
    ELSE
      writeln(aus,'unlabeled ');
    IF markiere THEN
      BEGIN        {Zahlen dranschreiben}
        write(aus,'withvalues ');
        ort  := min/10.0;
        expo := Round(lg(ort));
        REPEAT
          o2 := (x_hoch_y(10,expo));
          IF ((o2>=min) and (o2<=max)) THEN
            write(aus,'$10^{',expo:1,'}$ ');
          ort := 2.0*o2;
          IF ((ort<=max) and (ort>=min)) THEN
            write(aus,'2 ');
          ort := 3.0*o2;
          IF ((ort>=min) and (ort<=max)) THEN
            write(aus,'3 ');
          ort := 5.0*o2;
          IF ((ort>=min) and (ort<=max)) THEN
            write(aus,'5 ');
          expo := expo + 1
        UNTIL ort>max;
        writeln(aus,' /');
      END;
    {ticks setzen, normal lang}
    write(aus,' at ');
    ort  := min/10.0;
    expo := Round(lg(ort));
    REPEAT
      o2 := (x_hoch_y(10,expo));
      IF expo<0 THEN
        stellen := abs(expo)
      ELSE
        stellen := 0;
      IF ((o2>=min) and (o2<=max)) THEN
        write(aus,x_hoch_y(10,expo):1:stellen,' ');
      {o2 := ort;}
      ort := 2.0*o2;
      IF ((ort<=max) and (ort>=min)) THEN
        write(aus,ort:1:stellen,' ');
      ort := 3.0*o2;
      IF ((ort>=min) and (ort<=max)) THEN
        write(aus,ort:1:stellen,' ');
      ort := 5.0*o2;
      IF ((ort>=min) and (ort<=max)) THEN
        write(aus,ort:1:stellen,' ');
      expo := expo + 1
    UNTIL ort>max;
    writeln(aus,' /');
    {ticks, immer ohne Beschriftung, lang }
    writeln(aus,' unlabeled at ');
    ort := min/10.0;
    expo := Round(lg(ort));
    REPEAT
      o2 := (x_hoch_y(10,expo));
      IF expo<0 THEN
        stellen := abs(expo)
      ELSE
        stellen :=0;
      ort := 4.0*o2;
      IF ((ort>=min) and (ort<=max)) THEN
        write(aus,ort:1:stellen,' ');
      FOR i:=6 TO 9 DO
        BEGIN
          ort := i*o2;
          IF ((ort>=min) and (ort<=max)) THEN
            write(aus,ort:1:stellen,' ');
        END;
      expo := expo + 1
    UNTIL ort>max;
    writeln(aus,' /');
    {ticks, ohne Beschriftung, kurz }
    writeln(aus,' unlabeled short at ');
    ort := min/10.0;
    expo := Round(lg(ort));
    REPEAT
      o2 := (x_hoch_y(10,expo));
      IF expo<=0 THEN
        stellen := abs(expo)+1
      ELSE
        stellen :=0;
      FOR i:=1 TO 9 DO
        BEGIN
          ort := o2*(1.0+i*0.2);       {1.2, 1.4, ... 2.8 }
          IF ((ort>=min) and (ort<=max)) THEN
            write(aus,ort:1:stellen,' ');
        END;
      ort :=3.5*o2;
      IF ((ort>=min) and (ort<=max)) THEN
        write(aus,ort:1:stellen,' ');
      ort :=4.5*o2;
      IF ((ort>=min) and (ort<=max)) THEN
        write(aus,ort:1:stellen,' ');
      expo := expo + 1
    UNTIL ort>max;
    writeln(aus,' /');  {letztes "at"}
    writeln(aus,' /');  {Ende von "\axis"}
  END; { of Log_Schrift}
 
BEGIN { of Skala}
  open(con,'-STDOUT','UNKNOWN');
  rewrite(con);
  write('\setcoordinatesystem units <',unitx:1:5,'mm,',unity:1:5,'mm> point at
 ');
  IF xlog THEN
    write(lg(xmin):1:5,' ')
  ELSE
    write(xmin:1:5,' ');
  IF ylog THEN
    writeln(lg(ymin):1:5)
  ELSE
    writeln(ymin:1:5);
  write('\setplotarea x from ');
  IF xlog THEN
    write(lg(xmin):8:5)
  ELSE
    write(xmin:8:5);
  write(' to ');
  IF xlog THEN
    write(lg(xmax):8:5)
  ELSE
    write(xmax:8:5);
  write(', y from ');
  IF ylog THEN
    write(lg(ymin):8:5)
  ELSE
    write(ymin:8:5);
  write(' to ');
  IF ylog THEN
    writeln(lg(ymax):8:5)
  ELSE
    writeln(ymax:8:5);
  IF seite=left THEN
    BEGIN
      write('\axis bottom shiftedto y=');
      IF ylog THEN
        write(lg(ymin):8:5)
      ELSE
        write(ymin:8:5);
      write(' label {',unten,'} ');
      IF xlog THEN
        Log_schrift(con,xmin,xmax,true,xkreuz)
      ELSE
        writeln(' ticks numbered  from ',
                xmin:8:xdez,' to ',xmax:8:xdez,' by ',dx:8:xdez,
                ' unlabeled short from ',xmin:8:xdez,' to ',
                xmax:8:xdez,' by ',dxsub:8:xdez,' /');
      IF oben <> '' THEN
        BEGIN
          write('\axis top    shiftedto y=');
          IF ylog THEN
            write(lg(ymax):8:5)
          ELSE
            write(ymax:8:5);
          write(' label {',oben,'} ');
          IF xlog THEN
            Log_schrift(con,xmin,xmax,false,false)
          ELSE
            writeln(' ticks unlabeled  from ',
                    xmin:8:xdez,' to ',xmax:8:xdez,' by ',dx:8:xdez,
                    ' unlabeled short from ',xmin:8:xdez,' to ',
                    xmax:8:xdez,' by ',dxsub:8:xdez,' /')
        END;
      write('\axis left   shiftedto x=');
      IF xlog THEN
        write(lg(xmin):8:5)
      ELSE
        write(xmin:8:5);
      write(' label {',links,'} ');
      IF ylog THEN
        Log_schrift(con,ymin,ymax,true,ykreuz)
      ELSE
        writeln(' ticks numbered  from ',
                ymin:8:ydez,' to ',ymax:8:ydez,' by ',dy:8:ydez,
                ' unlabeled short from ',ymin:8:ydez,' to ',
                ymax:8:ydez,' by ',dysub:8:ydez,' /');
      IF not rechteachse THEN
        IF rechts <> '' THEN
          BEGIN
            write('\axis right  shiftedto x=');
            IF xlog THEN
              write(lg(xmax):8:5)
            ELSE
              write(xmax:8:5);
            write(' label {',rechts,'} ');
            IF ylog THEN
              Log_schrift(con,ymin,ymax,false,false)
            ELSE
              writeln(' ticks unlabeled  from ',
                      ymin:8:ydez,' to ',ymax:8:ydez,' by ',dy:8:ydez,
                      ' unlabeled short from ',ymin:8:ydez,' to ',
                      ymax:8:ydez,' by ',dysub:8:ydez,' /')
          END
    END
  ELSE
    BEGIN
      write('\axis right  shiftedto x=');
      IF xlog THEN
        write(lg(xmax):8:5)
      ELSE
        write(xmax:8:5);
      write(' label {',rechts,'} ');
      IF ylog THEN
        Log_schrift(con,ymin,ymax,true,ykreuz)
      ELSE
        writeln(' ticks numbered  from ',
                ymin:8:ydez,' to ',ymax:8:ydez,' by ',dy:8:ydez,
                ' unlabeled short from ',ymin:8:ydez,' to ',
                ymax:8:ydez,' by ',dysub:8:ydez,' /');
    END;
  close(con);
  write(aus,'\setcoordinatesystem units <',unitx:1:5,'mm,',unity:1:5,'mm> point
 at ');
  IF xlog THEN
    write(aus,lg(xmin):1:6,' ')
  ELSE
    write(aus,xmin:1:6,' ');
  IF ylog THEN
    writeln(aus,lg(ymin):1:6)
  ELSE
    writeln(aus,ymin:1:6);
  write(aus,'\setplotarea x from ');
  IF xlog THEN
    write(aus,lg(xmin):1:6)
  ELSE
    write(aus,xmin:1:6);
  write(aus,' to ');
  IF xlog THEN
    write(aus,lg(xmax):1:6)
  ELSE
    write(aus,xmax:1:6);
  write(aus,', y from ');
  IF ylog THEN
    write(aus,lg(ymin):1:6)
  ELSE
    write(aus,ymin:8:5);
  write(aus,' to ');
  IF ylog THEN
    writeln(aus,lg(ymax):1:6)
  ELSE
    writeln(aus,ymax:1:6);
  IF seite=left THEN
    BEGIN
      write(aus,'\axis bottom shiftedto y=');
      IF ylog THEN
        write(aus,lg(ymin):1:6)
      ELSE
        write(aus,ymin:1:6);
      write(aus,' label {',unten,'} ');
      IF xlog THEN
        Log_schrift(aus,xmin,xmax,true,xkreuz)
      ELSE
        BEGIN
          write(aus,' ticks ');
          IF xkreuz THEN
            write(aus,'andacross ');
          writeln(aus,'numbered  from ',
                      xmin:1:xdez,' to ',xmax:1:xdez,' by ',dx:1:xdez,
                      ' unlabeled short from ',xmin:1:xdez+3,' to ',
                      xmax:1:xdez+3,' by ',dxsub:1:xdez+3,' /');
        END;
      IF oben <> '' THEN
        BEGIN
          write(aus,'\axis top    shiftedto y=');
          IF ylog THEN
            write(aus,lg(ymax):1:6)
          ELSE
            write(aus,ymax:1:6);
          write(aus,' label {',oben,'} ');
          IF xlog THEN
            Log_schrift(aus,xmin,xmax,false,false)
          ELSE
            writeln(aus,' ticks unlabeled  from ',
                       xmin:1:xdez+2,' to ',xmax:1:xdez+2,' by ',dx:1:xdez+2,
                       ' unlabeled short from ',xmin:1:xdez+3,' to ',
                       xmax:1:xdez+3,' by ',dxsub:1:xdez+3,' /')
        END;
      write(aus,'\axis left   shiftedto x=');
      IF xlog THEN
        write(aus,lg(xmin):1:6)
      ELSE
        write(aus,xmin:1:6);
      write(aus,' label {',links,'} ');
      IF ylog THEN
        Log_schrift(aus,ymin,ymax,true,ykreuz)
      ELSE
        BEGIN
          write(aus,' ticks ');
          IF ykreuz THEN
            write(aus,'andacross ');
          writeln(aus,'numbered  from ',
                      ymin:1:ydez,' to ',ymax:1:ydez,' by ',dy:1:ydez,
                      ' unlabeled short from ',ymin:1:ydez+3,' to ',
                      ymax:1:ydez+3,' by ',dysub:1:ydez+3,' /');
        END;
      IF not rechteachse THEN
        IF rechts <> '' THEN
          BEGIN
            write(aus,'\axis right  shiftedto x=');
            IF xlog THEN
              write(aus,lg(xmax):1:6)
            ELSE
              write(aus,xmax:1:6);
            write(aus,' label {',rechts,'} ');
            IF ylog THEN
              Log_schrift(aus,ymin,ymax,false,false)
            ELSE
              writeln(aus,' ticks unlabeled  from ',
                          ymin:1:ydez+2,' to ',ymax:1:ydez+2,' by ',dy:1:ydez+2,
                          ' unlabeled short from ',ymin:1:ydez+3,' to ',
                          ymax:1:ydez+3,' by ',dysub:1:ydez+3,' /')
          END
    END
  ELSE
    BEGIN
      write(aus,'\axis right  shiftedto x=');
      IF xlog THEN
        write(aus,lg(xmax):1:6)
      ELSE
        write(aus,xmax:1:6);
      write(aus,' label {',rechts,'} ');
      IF ylog THEN
        Log_schrift(aus,ymin,ymax,true,ykreuz)
      ELSE
        BEGIN
          write(aus,' ticks ');
          IF ykreuz THEN
            write(aus,'andacross ');
          writeln(aus,'numbered  from ',
                      ymin:1:ydez,' to ',ymax:1:ydez,' by ',dy:1:ydez,
                      ' unlabeled short from ',ymin:1:ydez+3,' to ',
                      ymax:1:ydez+3,' by ',dysub:1:ydez+3,' /');
        END;
    END;
END; {of Skala}
 
BEGIN
  writeln;
  writeln('          Datei-Konverter Daten -->PiCTeX input ...  ');
  writeln('(c) Christian Boettger, Inst. f. Metallphysik, TU Braunschweig');
  writeln(' &  Martin Frerichs, Inst. f. Theor. Physik, U Goettingen for');
  writeln('                     Revised Unix Edition');
  writeln('                Version 1.0.1, 26.7.1991 ');
  writeln;
  write('PiCTeX-Datei                     : ');
  readln(ausn);
  open(aus,ausn,'UNKNOWN');
  rewrite(aus);
  writeln;
  write('X-Achse : Minimum = ');
  readln(xmin);
  write('X-Achse : Maximum = ');
  readln(xmax);
  REPEAT
    write('x-Achse logarithmisch (j/n) ? ');
    readln(ch);
  UNTIL ((ch='n') or (ch='j'));
  IF ch='j' THEN
    xlog := true
  ELSE xlog := false;
  IF not xlog THEN
    BEGIN
      write('X-Achse : Schrittweite = ');
      readln(dx);
      write('X-Achse : Schrittweite Sub-Unterteilungen = ');
      readln(dxsub);
      write('X-Achse : Dezimalstellen der Beschriftung = ');
      readln(xdez);
    END;
  REPEAT
    write('x-Achse Markierungen durchziehen (Gitter) (j/n) ? ');
    readln(ch);
  UNTIL ((ch='n') or (ch='j'));
  IF ch='j' THEN
    xkreuz := true
  ELSE
    xkreuz := false;
  writeln;
  writeln('Eingabe der Daten fuer die (linke) Y-Achse ...');
  write('y-Achse : Minimum = ');
  readln(ymin);
  write('y-Achse : Maximum = ');
  readln(ymax);
  REPEAT
    write('(linke) y-Achse logarithmisch (j/n) ? ');
    readln(ch);
  UNTIL ((ch='n') or (ch='j'));
  IF ch='j' THEN
    ylog := true
  ELSE
    ylog := false;
  IF not ylog THEN
    BEGIN
      write('y-Achse : Schrittweite = ');
      readln(dy);
      write('y-Achse : Schrittweite Sub-Unterteilungen = ');
      readln(dysub);
      write('y-Achse : Dezimalstellen der Beschriftung = ');
      readln(ydez);
    END;
  REPEAT
    write('(linke) y-Achse Markierungen durchziehen (Gitter) (j/n) ? ');
    readln(ch);
  UNTIL ((ch='N') or (ch = 'n') or (ch = 'J') or (ch='j'));
  IF (ch='j') or (ch = 'j') THEN
    ykreuz := true
  ELSE
    ykreuz := false;
  writeln;
  REPEAT
    write('zweite unabhaengige Skala auf rechter y-Achse (j/n) ? ');
    readln(ch);
  UNTIL ((ch='n') or (ch='j'));
  IF ch='j' THEN
    rechteachse :=true
  ELSE
    rechteachse:=false;
  IF rechteachse THEN
    BEGIN
      writeln;
      write('rechte y-Achse : Minimum = ');
      readln(rymin);
      write('rechte y-Achse : Maximum = ');
      readln(rymax);
      REPEAT
        write('rechte y-Achse logarithmisch (j/n) ? ');
        readln(ch);
      UNTIL ((ch='n') or (ch='j'));
      IF ch='j' THEN
        rylog := true
      ELSE
        rylog := false;
      IF not rylog THEN
        BEGIN
          write('rechte y-Achse : Schrittweite = ');
          readln(rdy);
          write('rechte y-Achse : Schrittweite Sub-Unterteilungen = ');
          readln(rdysub);
          write('rechte y-Achse : Dezimalstellen der Beschriftung = ');
          readln(rydez);
        END;
      REPEAT
        write('rechte y-Achse Markierungen durchziehen (Gitter) (j/n) ? ');
        readln(ch);
      UNTIL ((ch='n') or (ch='j'));
      IF ch='j' THEN
        rykreuz := true
      ELSE
        rykreuz := false;
      writeln;
    END;
  write('Beschriftung Unterkante : ');
  readln(unten);
  write('Beschriftung Oberkante  : ');
  readln(oben);
  write('Beschriftung rechts     : ');
  readln(rechts);
  write('Beschriftung links      : ');
  readln(links);
  writeln;
  write('Breite des Bildes in mm = ');
  readln(breite);
  write('Hoehe  des Bildes in mm = ');
  readln(hoehe);
  writeln;
  write('Unterschrift des Bildes (\caption) : ');
  readln(unterschrift);
  write('Ueberschrift des Bildes            : ');
  readln(ueberschrift);
  write('LaTeX-Label des Bildes : ');readln(labelstr);
  REPEAT
    writeln('Sprache des Textes:');
    write(' a=austrian, e=english, f=french, g=german, u=USenglish ? ');
    readln(sprache);
  UNTIL sprache in ['a','e','f','g','u'];
  writeln;
  writeln('und nun die Zwischenspeicherung ...');
  savename :='';
  REPEAT
    write('Dateiname fuer \savelinesandcurves bzw. \replot = ');
    readln(savename);
  UNTIL savename<>'';
  write('Kommentar im Save-File = ');
  readln(savekomm);
  writeln;
  writeln('und nun die if-switches (Diese muessen im Dokument vor Benutzung');
  writeln('                         deklariert werden!)');
  REPEAT
    write('Switch replot benutzen (j/n) ? ');
    readln(ch);
  UNTIL ((ch='n') or (ch='j'));
  IF ch='j' THEN
    replot := true
  ELSE
    replot := false;
  writeln;
  REPEAT
    write('Switch finalplot benutzen (j/n) ? ');
    readln(ch);
  UNTIL ((ch='n') or (ch='j'));
  IF ch='j' THEN
    finalplot := true
  ELSE
    finalplot := false;
  writeln;
  Einheiten(unitx,unity,unitry,breite,hoehe,rechteachse,xlog,ylog,rylog);
  writeln('\begin{figure}[htb]');
  writeln('\originalTeX');
  writeln('\[ %horizontal zentrierte Ausgabe an');
  writeln('\beginpicture');
  writeln(aus,'\begin{figure}[htb]');
  writeln(aus,'\originalTeX');
  writeln(aus,'\[  %zentrierte Ausgabe an');
  writeln(aus,'\beginpicture');
  IF replot THEN
    BEGIN
      writeln(aus,'\ifreplot');
      writeln(aus,'\else');
    END;
  writeln(aus,'\savelinesandcurves on "',savename,'"');
  writeln(aus,'\writesavefile {',savekomm,'}');
  IF replot THEN
    writeln(aus,'\fi');
  skala (aus,left,
         unitx,unity,
         xlog,ylog,rechteachse,xkreuz,ykreuz,
         xmin,xmax,dx,dxsub,ymin,ymax,dy,dysub,xdez,ydez,
         unten,oben,rechts,links);
  IF ueberschrift <> '' THEN
    writeln(aus,'\plotheading {',ueberschrift,'}');
  IF replot THEN
    BEGIN
      writeln(aus,'\ifreplot');
      IF finalplot THEN
        writeln(aus,'\iffinalplot');
      writeln(aus,'\replot "',savename,'"');
      IF finalplot THEN
        writeln(aus,'\fi');
      writeln(aus,'\fi')
    END
  ELSE
    writeln(aus,'%\replot');
  fertig := false;
  IF finalplot THEN
    writeln(aus,'\iffinalplot');
  REPEAT
    writeln;
    IF rechteachse THEN
      writeln('nur Daten fuer die LINKE (!!) y- Achse jetzt !!!!');
    process_file(left,fertig,rechteachse,xlog,ylog,aus);
  UNTIL fertig;
  IF finalplot THEN
    writeln(aus,'\fi');
  IF rechteachse THEN
    BEGIN
      skala (aus,right,
             unitx,unitry,
             xlog,rylog,rechteachse,xkreuz,rykreuz,
             xmin,xmax,dx,dxsub,rymin,rymax,rdy,rdysub,xdez,rydez,
             unten,oben,rechts,links);
      fertig := false;
      IF finalplot THEN
        writeln(aus,'\iffinalplot');
      REPEAT
        writeln;
        writeln('nur Daten fuer die RECHTE (!!) y- Achse ab jetzt !!!!');
        process_file(right,fertig,rechteachse,xlog,rylog,aus);
      UNTIL fertig;
      IF finalplot THEN
        writeln(aus,'\fi');
    END;
  IF replot THEN
    BEGIN
      writeln(aus,'\ifreplot');
      writeln(aus,'\else')
    END;
  writeln(aus,'\dontsavelinesandcurves');
  IF replot THEN
    writeln(aus,'\fi');
  writeln(aus,'\endpicture');
  writeln(aus,'\]');
  writeln(aus,'\germanTeX');
  write(aus,'\selectlanguage{\');
  CASE sprache OF
    'a' : writeln(aus,'austrian}');
    'e' : writeln(aus,'english}');
    'f' : writeln(aus,'french}');
    'g' : writeln(aus,'german}');
    'u' : writeln(aus,'USenglish}');
  END;
  writeln(aus,'\caption{',unterschrift,' \label{',labelstr,'}}');
  writeln(aus,'\end{figure}');
  writeln('\endpicture');
  writeln('\]');
  writeln('\germanTeX');
  write('\selectlanguage{\');
  CASE sprache OF
    'a' : writeln('austrian}');
    'e' : writeln('english}');
    'f' : writeln('french}');
    'g' : writeln('german}');
    'u' : writeln('USenglish}');
  END;
  writeln('\caption{',unterschrift,' \label{',labelstr,'}}');
  writeln('\end{figure}');
  close(aus);
  9999:
END.