(*---------------------------------------------------------------------------
   :Program.    Kurve
   :Author.     Jörg Wesemann
   :Address.    Auf der Heide 10, 2807 Achim - Baden
   :Phone.      (0)4202 / 70658
   :Shortcut.   [jwe]
   :Version.    2.94
   :Date.       23.03.89
   :Copyright.  PD
   :Language.   Modula-II
   :Translator. M2Amiga
   :Imports.    JWELib: RPortToILBM , DumpScreen
   :Update.     none.
   :Contents.   Hautprogramm mit Steuerschleife
   :Remark.     none
---------------------------------------------------------------------------*)



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 ADR,CAST;
FROM Terminal 		IMPORT waitCloseGadget;
FROM Strings 		IMPORT Length;
FROM Exec		IMPORT OpenLibrary,CloseLibrary,LibraryPtr;
FROM startupproc 	IMPORT string,nullbuffer,grenze,cleanup,dateiabfrage,
			       konstlist,neu,CLS,festgrenzestr,namestr,sp,wptr;
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 fktstring;  
FROM menu 		IMPORT mainmenu,infomenu;
FROM datei		IMPORT callprolog;
FROM LGSboss		IMPORT LGSBoss;
FROM bparser		IMPORT bparser;
FROM JWELib		IMPORT RPortToILBM,DumpScreen;


PROCEDURE sizewindow;

  VAR
    iptr	: IntuitionBasePtr;
    lptr	: LibraryPtr;
    sptr	: ScreenPtr;
        
BEGIN 
  lptr:= OpenLibrary(ADR("intuition.library"),0);
  Assert(lptr#NIL,ADR("Intuition.Library nicht gefunden"));
  iptr:= CAST(IntuitionBasePtr,lptr);
  sptr:= iptr^.activeScreen;
  wptr:= iptr^.activeWindow;
  MoveWindow(wptr,-wptr^.leftEdge,-wptr^.topEdge);
  SizeWindow(wptr,640-wptr^.width,256-wptr^.height);
  CloseLibrary(lptr);
END sizewindow;
   
PROCEDURE menu;
  
  VAR
    taste : CARDINAL;

BEGIN
  dateiabfrage:= FALSE;
  string:= "sin(x)";		(* F'on einstellen	*)
  fktstring(string,2);
  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:= "KurveV2_94.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: fktstring(string,2);
      | 12: infomenu();
      | 13: IF NOT neu THEN 
      	      koordinaten();
            END;
      | 14: IF NOT neu THEN
      	      fktstring(namestr,3);
              RPortToILBM(sp,ADR(sp^.rastPort),namestr,1);
            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.

