(*

    :Program.       Kurve
    :Author.        Jörg Wesemann
    :Address.       Auf der Heide 10 , 2807 Achim - Baden
    :Phone.         04202 / 70658
    :Version.       3.20 (deutsch)
    :Date.          28.09.1989
    :Copyright.     Public Domain, bei eigenen Änderungen bitte Nachricht !
    :Language.      Modula II
    :Translator.    M2-Amiga, Version 3.2d, 01.11.88
    :Imports.       JWELib: DumpScreen -> Drucker
    :Bugs.          none known

*)

MODULE kurve;

FROM Intuition          IMPORT NewWindow,WindowPtr,ScreenPtr,SizeWindow,
                               OpenWindow,CloseWindow,MoveWindow,ScreenFlagSet,
                               WindowFlagSet,IDCMPFlagSet,ScreenFlags,
                               WindowFlags,IDCMPFlags,IntuitionBase,
                               IntuitionBasePtr;
FROM Arts               IMPORT TermProcedure,Assert,BreakPoint;
FROM SYSTEM             IMPORT CAST,ADR;
FROM Terminal           IMPORT waitCloseGadget;
FROM Strings            IMPORT Length;
FROM startupproc        IMPORT string,nullbuffer,grenze,cleanup,dateiabfrage,
                               konstlist,neu,CLS,festgrenzestr,namestr,sp,wptr,
                               funkstr,Buffer7,argument,FORMEL;
FROM Terminal           IMPORT Write;
FROM wertetabelle       IMPORT wertetabelle,wertetabelleif;
FROM nullstellen        IMPORT nullstellen;
FROM extremstellen      IMPORT extremstellen;
FROM wendestellen       IMPORT wendestellen;
FROM integration        IMPORT integration;
FROM symmetrie          IMPORT symmetrie;
FROM monotonie          IMPORT monotonie;
FROM plotter            IMPORT plotter,koordinaten;
FROM intervall          IMPORT funkeingabe,fktstring;
FROM menu               IMPORT mainmenu,infomenu;
FROM datei              IMPORT callprolog,SaveScreen;
FROM LGSboss            IMPORT LGSBoss;
FROM bparser            IMPORT bparser;
FROM JWELib             IMPORT DumpScreen;
FROM UPN                IMPORT AllocUPN,UPN,KillUPN,AddVarsToUPN;
IMPORT Intuition;


PROCEDURE sizewindow;

  VAR
    iptr        : IntuitionBasePtr;
    sptr        : ScreenPtr;

BEGIN
  iptr:= ADR(Intuition);
  Assert(iptr#NIL,ADR("Intuition.Library nicht gefunden"));
  sptr:= iptr^.activeScreen;
  wptr:= iptr^.activeWindow;
  MoveWindow(wptr,-wptr^.leftEdge,-wptr^.topEdge);
  SizeWindow(wptr,640-wptr^.width,256-wptr^.height);
END sizewindow;

PROCEDURE menu;

  VAR
    taste : CARDINAL;
    ok : BOOLEAN;

BEGIN
  IF NOT AllocUPN(FORMEL) THEN
    HALT;
  ELSIF NOT AddVarsToUPN(FORMEL,"x") THEN
    HALT;
  END;
  argument:= "";
  dateiabfrage:= FALSE;
  funkstr[1]:= "sin(x)";
  funkstr[2]:= "exp(x)";
  funkstr[3]:= "log(x)";
  funkstr[4]:= "x^3+x^2+x-1";
  funkstr[5]:= "asin(x)";
  Buffer7:= "1";
  string:= "sin(x)";            (* F'on einstellen      *)
  funkeingabe();
  grenze[1]:= "5.0";            (* Ymax                 *)
  grenze[2]:= "-5.0";           (* Ymin                 *)
  grenze[3]:= "-5.0";           (* Xmin                 *)
  grenze[4]:= "5.0";            (* Xmax                 *)
  grenze[5]:= "1.0";            (* dX                   *)
  grenze[6]:= "1.0";            (* dY                   *)
  grenze[7]:= "0";              (* Ableitung            *)
  grenze[8]:= "50";             (* Punkte               *)
  grenze[9]:= "0";              (* Genauigkeit          *)
  nullbuffer[1]:= "-5.0";       (* Xmin                 *)
  nullbuffer[2]:= "0.2";        (* dX                   *)
  nullbuffer[3]:= "5.0";        (* Xmax                 *)
  nullbuffer[4]:= "1";          (* Newton               *)
  festgrenzestr:= "0.0";        (* Integralfunktion a   *)
  namestr:= "KurveV3.2.iff";    (* IFF Name             *)
  REPEAT
    taste:= mainmenu();
    CASE taste OF
      |  1: wertetabelle;
      |  2: nullstellen;
      |  3: extremstellen;
      |  4: wendestellen;
      |  5: integration;
      |  6: symmetrie;
      |  7: monotonie;
      |  8: plotter;
      |  9: konstlist;
      | 10: Write(CLS);
      | 11: funkeingabe();
      | 12: infomenu();
      | 13: IF NOT neu THEN
              koordinaten();
            END;
      | 14: IF NOT neu THEN
              SaveScreen();
            END;
      | 15: IF NOT neu THEN
              DumpScreen(ADR(sp^.rastPort),sp);
            END;
      | 16: callprolog;
      | 17: wertetabelleif;
      | 18: bparser;
      | 19: LGSBoss;
    ELSE
    ;
    END;                        (* CASE *)
  UNTIL taste = 10;             (* REPEAT *)
END menu;


BEGIN                           (* Kurve Hauptprogramm *)
  sizewindow();
  waitCloseGadget:= FALSE;
  neu:= TRUE;
  TermProcedure(cleanup);
  menu;
END kurve.
