(*---------------------------------------------------------------------------
   :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.    none.
   :Update.     none.
   :Contents.   Definiert die verschiedenen INTUITION Menüs
   :Remark.     none.
---------------------------------------------------------------------------*)


IMPLEMENTATION MODULE menu;

FROM Arts 		IMPORT 	Assert,BreakPoint;
FROM SYSTEM 		IMPORT 	ADDRESS,ADR,SHIFT,LONGSET;
FROM Intuition 		IMPORT 	ScreenFlags,ScreenFlagSet,NewWindow,WindowPtr,
		      		IDCMPFlags,IDCMPFlagSet,WindowFlags,Image,
                                WindowFlagSet,ClearMenuStrip,OpenWindow,
                                CloseWindow,IntuiMessage,Gadget,strGadget,
                      		GadgetFlags,GadgetFlagSet,ActivationFlags,
                                boolGadget,ActivationFlagSet,Border,StringInfo,
                                IntuiText,MenuItem,Menu,MenuItemFlags,
                                MenuItemFlagSet,SetMenuStrip;
FROM Graphics 		IMPORT 	Text,Move,jam1,RastPortPtr,SetAPen,Draw;
FROM Exec 		IMPORT 	GetMsg,ReplyMsg,WaitPort;
FROM Strings 		IMPORT 	Length;
FROM InOut 		IMPORT 	WriteLn,WriteString,WriteInt;
FROM startupproc 	IMPORT 	stringbuffergr,stringbufferkl,STRING,rp,
				dateiabfrage;
FROM imagedata 		IMPORT 	okimagedata,okhimagedata,CopyToChip,oksize,
				okhsize,CARDPTR,wahlimagedata,wahlhimagedata,
	                        wahlsize,wahlhsize;


CONST
  VERSION  = "KURVENDISKUSSION   -   V 2.94      © 1988/89  Jörg Wesemann";
  VERSIONL = 59;
  
PROCEDURE rand(rast: RastPortPtr; x,y,dx,dy: INTEGER);

BEGIN
  Move(rast,x,y);
  Draw(rast,x+dx,y);
  Draw(rast,x+dx,y+dy);
  Draw(rast,x,y+dy);
  Draw(rast,x,y);
  
 END rand;


PROCEDURE infomenu();

  CONST
    booleangadget 	= 1;
                
  VAR 
    MyWindow    			: NewWindow;
    MyWindowPtr  			: WindowPtr;
    class				: IDCMPFlagSet;
    IntuiMsg    			: POINTER TO IntuiMessage;
    rp					: RastPortPtr;
    ok,okh				: Image;
    imageptr,himageptr			: CARDPTR;
    gad1				: Gadget;
    
  
BEGIN 
  WITH MyWindow DO
    leftEdge:= 0; topEdge:= 50;        
    width:= 640; height:= 150;         
    detailPen:= 0; blockPen:= 1;       
    idcmpFlags:= IDCMPFlagSet{closeWindow,gadgetUp}; 
    flags:= WindowFlagSet{windowDrag,activate,windowClose};  
    firstGadget:= ADR(gad1);
    checkMark:= NIL;
    title:= ADR("INFO - Fenster");
    bitMap:= NIL;
    type:= ScreenFlagSet{wbenchScreen};
    minWidth:= 640; maxWidth:= 640;
    minHeight:= 100; maxHeight:= 256;     
  END;
  CopyToChip(ADR(okimagedata),imageptr,oksize);
  CopyToChip(ADR(okhimagedata),himageptr,okhsize);
  WITH ok DO
    leftEdge:= 0; topEdge:= 0; width:= 80; height:= 20; depth:=2;
    imageData:= imageptr; planePick:= 3; planeOnOff:= 0;
    nextImage:= NIL;
  END;
  WITH okh DO
    leftEdge:= 0; topEdge:= 0; width:= 80; height:= 20; depth:=2;
    imageData:= himageptr; planePick:= 3; planeOnOff:= 0;
    nextImage:= NIL;
  END;
  WITH gad1 DO
    nextGadget:= NIL;
    leftEdge:= 280; topEdge:= 100;
    width:= 80; height:= 20;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(ok); selectRender:= ADR(okh); 
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= booleangadget;
    userData:= NIL;
  END;
  MyWindowPtr:= OpenWindow(MyWindow);
  Assert(MyWindowPtr#NIL, ADR("Fenster nicht geöffnet"));
  rp:= MyWindowPtr^.rPort;
  Move(rp,90,40);
  Text(rp,ADR(VERSION),VERSIONL);
  Move(rp,60,60);
  Text(rp,ADR(
    "Public Domain, bei Änderungen bitte Benachrichtigung an den Autor !"),67);
  Move(rp,285,75);
  Text(rp,ADR("Das war's"),9);
  LOOP
    WaitPort(MyWindowPtr^.userPort); 
    IntuiMsg:= GetMsg(MyWindowPtr^.userPort);
    class:= IntuiMsg^.class;
    ReplyMsg(IntuiMsg);
    IF (closeWindow IN class) OR (gadgetUp IN class) THEN
      EXIT;
    END;
  END (* LOOP *);
  CloseWindow(MyWindowPtr);
END infomenu;



PROCEDURE mainmenu():CARDINAL;

  TYPE 
    menus = (Project,Mathe);
    items = (eing,konst,quit,info,prt,noprt,savesc,printsc,prolog,wert,wertf,
    	     wertif,null,extrem,wende,int,symm,mono,plot,koord,bparse,LGS);

  VAR
    menustrip   		: ARRAY [Project..Mathe] OF Menu;
    itemchain   		: ARRAY [eing..LGS] OF MenuItem;
    itemtexts   		: ARRAY [eing..LGS] OF IntuiText;
    laufi       		: items;
    mywindow    		: NewWindow;
    mywindowptr 		: WindowPtr;
    class       		: IDCMPFlagSet;
    intuimsg    		: POINTER TO IntuiMessage;
    set         		: BOOLEAN;
    code,retval 		: CARDINAL;
  
  

  PROCEDURE MENUNUM(c : CARDINAL) : CARDINAL;
    
  BEGIN 
    RETURN (c MOD 32);
  END MENUNUM;

     
       
  PROCEDURE ITEMNUM(c : CARDINAL) : CARDINAL;
    
  BEGIN 
    RETURN ((c MOD 2048) DIV 32);
  END ITEMNUM;
   
   
   
  PROCEDURE SUBNUM(c : CARDINAL) : CARDINAL;
    
  BEGIN 
    RETURN (c DIV 2048);
  END SUBNUM;  

BEGIN
  WITH menustrip[Project] DO
    nextMenu:= ADR(menustrip[Mathe]);
    leftEdge:= 10; topEdge:= 0;
    width:= 200; height:= 0;
    flags:= {0};
    menuName:=ADR("Project");
    firstItem:= ADR(itemchain[eing]);
  END;
  
  WITH menustrip[Mathe] DO
    nextMenu:= NIL;
    leftEdge:= 220; topEdge:= 0;
    width:= 200; height:= 0;
    flags:= {0};
    menuName:=ADR("Mathe");
    firstItem:= ADR(itemchain[wert]);
  END;
  WITH itemchain[eing] DO
    nextItem:= ADR(itemchain[konst]);
    leftEdge:= -5; topEdge:= 0;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[eing]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[konst] DO
    nextItem:= ADR(itemchain[quit]);
    leftEdge:= -5; topEdge:= 12;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[konst]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[quit] DO
    nextItem:= ADR(itemchain[info]);
    leftEdge:= -5; topEdge:=24;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[quit]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[info] DO
    nextItem:= ADR(itemchain[prt]);
    leftEdge:= -5; topEdge:=36;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[info]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[prt] DO
    nextItem:= ADR(itemchain[noprt]);;
    leftEdge:= -5; topEdge:=48;
    width:= 200; height:= 11;
    IF dateiabfrage THEN
      flags:= MenuItemFlagSet{checkIt,checked,highComp,itemText,itemEnabled};
    ELSE
      flags:= MenuItemFlagSet{checkIt,highComp,itemText,itemEnabled};
    END;
    mutualExclude:= LONGSET{5};
    itemFill:= ADR(itemtexts[prt]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[noprt] DO
    nextItem:= ADR(itemchain[savesc]);
    leftEdge:= -5; topEdge:=60;
    width:= 200; height:= 11;
    IF dateiabfrage THEN
      flags:= MenuItemFlagSet{checkIt,highComp,itemText,itemEnabled};
    ELSE
      flags:= MenuItemFlagSet{checkIt,checked,highComp,itemText,itemEnabled};
    END;
    mutualExclude:= LONGSET{4};
    itemFill:= ADR(itemtexts[noprt]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[savesc] DO
    nextItem:= ADR(itemchain[printsc]);
    leftEdge:= -5; topEdge:=72;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[savesc]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[printsc] DO
    nextItem:= ADR(itemchain[prolog]);
    leftEdge:= -5; topEdge:=84;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[printsc]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[prolog] DO
    nextItem:= NIL;
    leftEdge:= -5; topEdge:=96;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[prolog]);
    selectFill:= NIL;
    subItem:= NIL;
  END;
  WITH itemchain[wert] DO
    nextItem:= ADR(itemchain[null]);
    leftEdge:= -5; topEdge:=0;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[wert]);
    selectFill:= NIL;
    subItem:= ADR(itemchain[wertf]);
  END; 
  WITH itemchain[wertf] DO
    nextItem:= ADR(itemchain[wertif]);
    leftEdge:=150; topEdge:=5;
    width:= 150; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[wertf]);
    selectFill:= NIL;
    command:= "T";
    subItem:= NIL;
  END;
  WITH itemchain[wertif] DO
    nextItem:= NIL;
    leftEdge:=150; topEdge:=17;
    width:= 150; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[wertif]);
    selectFill:= NIL;
    subItem:= NIL;
  END; 
  WITH itemchain[null] DO
    nextItem:= ADR(itemchain[extrem]);
    leftEdge:= -5; topEdge:=12;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[null]);
    selectFill:= NIL;
    command:= "N";
    subItem:= NIL;
  END; 
  WITH itemchain[extrem] DO
    nextItem:= ADR(itemchain[wende]);
    leftEdge:= -5; topEdge:=24;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[extrem]);
    selectFill:= NIL;
    command:= "E";
    subItem:= NIL;
  END; 
  WITH itemchain[wende] DO
    nextItem:= ADR(itemchain[int]);
    leftEdge:= -5; topEdge:=36;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[wende]);
    selectFill:= NIL;
    command:= "W";
    subItem:= NIL;
  END; 
  WITH itemchain[int] DO
    nextItem:= ADR(itemchain[symm]);
    leftEdge:= -5; topEdge:=48;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[int]);
    selectFill:= NIL;
    command:= "I";
    subItem:= NIL;
  END; 
  WITH itemchain[symm] DO
    nextItem:= ADR(itemchain[mono]);
    leftEdge:= -5; topEdge:=60;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[symm]);
    selectFill:= NIL;
    command:= "S";
    subItem:= NIL;
  END; 
  WITH itemchain[mono] DO
    nextItem:= ADR(itemchain[plot]);
    leftEdge:= -5; topEdge:=72;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[mono]);
    selectFill:= NIL;
    command:= "M";
    subItem:= NIL;
  END; 
  WITH itemchain[plot] DO
    nextItem:= ADR(itemchain[koord]);;
    leftEdge:= -5; topEdge:=84;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[plot]);
    selectFill:= NIL;
    command:= "P";
    subItem:= NIL;
  END;
  WITH itemchain[koord] DO
    nextItem:= ADR(itemchain[bparse]);
    leftEdge:= -5; topEdge:=96;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[koord]);
    selectFill:= NIL;
    command:= "K";
    subItem:= NIL;
  END; 
  WITH itemchain[bparse] DO
    nextItem:= ADR(itemchain[LGS]);
    leftEdge:= -5; topEdge:=112;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[bparse]);
    selectFill:= NIL;
    command:= "B";
    subItem:= NIL;
  END; 
  WITH itemchain[LGS] DO
    nextItem:= NIL;
    leftEdge:= -5; topEdge:=124;
    width:= 200; height:= 11;
    flags:= MenuItemFlagSet{highComp,itemText,itemEnabled,commSeq};
    mutualExclude:= LONGSET{};
    itemFill:= ADR(itemtexts[LGS]);
    selectFill:= NIL;
    command:= "L";
    subItem:= NIL;
  END; 
  WITH itemtexts[eing] DO
    frontPen:= 0; backPen:= 1; drawMode:= jam1;
    leftEdge:= 0; topEdge:= 0;
    iTextFont:= NIL; nextText:= NIL;
  END;
  FOR laufi:= konst TO LGS DO
    itemtexts[laufi]:= itemtexts[eing];
  END;
  itemtexts[eing].iText  	:= ADR("EINGABE der Funktion");
  itemtexts[konst].iText 	:= ADR("KONSTANTENAUSGABE");
  itemtexts[quit].iText  	:= ADR("ENDE");
  itemtexts[info].iText  	:= ADR("INFO");
  itemtexts[prt].iText   	:= ADR("  Dateiabfrage: AN");
  itemtexts[noprt].iText 	:= ADR("  Dateiabfrage: AUS");
  itemtexts[savesc].iText	:= ADR("SAVE Screen");
  itemtexts[printsc].iText	:= ADR("PRINT Screen");
  itemtexts[prolog].iText	:= ADR("PROLOG aufrufen");
  itemtexts[wert].iText  	:= ADR("Wertetabelle");
  itemtexts[wertf].iText  	:= ADR("FUNKTION");  
  itemtexts[wertif].iText  	:= ADR("INTEGRALFUNKTION");
  itemtexts[null].iText  	:= ADR("Nullstellen");
  itemtexts[extrem].iText	:= ADR("Extremstellen");
  itemtexts[wende].iText 	:= ADR("Wendestellen");
  itemtexts[int].iText   	:= ADR("Integration");
  itemtexts[symm].iText  	:= ADR("Symmetrie");
  itemtexts[mono].iText  	:= ADR("Monotonie");
  itemtexts[plot].iText  	:= ADR("Funktionsplotter");
  itemtexts[koord].iText 	:= ADR("Koordinatenanzeige");
  itemtexts[bparse].iText	:= ADR("Binäre Tabelle");
  itemtexts[LGS].iText 		:= ADR("Lin. Gleichungen");
  WITH mywindow DO
    leftEdge:= 0; topEdge:= 0; width:= 640; height:= 256;
    detailPen:= 0; blockPen:= 1;
    idcmpFlags:= IDCMPFlagSet{menuPick,menuVerify};
    flags:= WindowFlagSet{activate,windowDrag,windowDepth,windowSizing};
    firstGadget:= NIL; checkMark:= NIL;
    title:= ADR(VERSION);
    bitMap:= NIL; type:= ScreenFlagSet{wbenchScreen};
    minWidth:= 50; minHeight:= 30; maxWidth:= 640; maxHeight:= 256;
  END;
  mywindowptr:= OpenWindow(mywindow);
  rp:= mywindowptr^.rPort;
  set:= SetMenuStrip(mywindowptr,ADR(menustrip[Project]));
  retval:= 0;
  IF NOT (set) THEN 
    HALT;
  END;
  LOOP
    WaitPort(mywindowptr^.userPort);
    intuimsg:= GetMsg(mywindowptr^.userPort);
    class:= intuimsg^.class;
    code:=  intuimsg^.code; 
    ReplyMsg(intuimsg);
    IF (menuPick IN class) THEN
      CASE MENUNUM(code) OF
        | 0 : CASE ITEMNUM(code) OF
                | 0 : retval:= 11;
                | 1 : retval:=  9;
                | 2 : retval:= 10;
                | 3 : retval:= 12;
                | 4 : dateiabfrage:= TRUE;
		| 5 : dateiabfrage:= FALSE;
                | 6 : retval:= 14;
                | 7 : retval:= 15;
                | 8 : retval:= 16;
              ELSE
                  retval:= 0;
              END;
        | 1 : CASE ITEMNUM(code) OF
                | 0 : CASE SUBNUM(code) OF
                        | 0 : retval:=  1; 
                        | 1 : retval:= 17;
                      ELSE
                        retval:= 0;
                      END;
                | 1 : retval:=  2;
                | 2 : retval:=  3;
                | 3 : retval:=  4;
                | 4 : retval:=  5;
                | 5 : retval:=  6;
                | 6 : retval:=  7;
                | 7 : retval:=  8;
                | 8 : retval:= 13;
                | 9 : retval:= 18;
                | 10: retval:= 19;
              ELSE
                retval:=0;
              END; 					(* inner CASE	*)
      ELSE
        retval:=0;
      END; 						(* outer CASE 	*) 
    END; 						(* IF 		*)
    IF retval#0 THEN
      EXIT;
    END;
  END;							(* LOOP 1	*)
  ClearMenuStrip(mywindowptr);
  CloseWindow(mywindowptr);
  RETURN (retval);	
END mainmenu;



PROCEDURE wartemenu();

  CONST
    warte 	= 1;
                
  VAR 
    MyWindow    			  : NewWindow;
    MyWindowPtr         		  : WindowPtr;
    class				  : IDCMPFlagSet;
    IntuiMsg    			  : POINTER TO IntuiMessage;
    gad 				  : Gadget;
    Rahmen				  : Border;
    xyFeld				  : ARRAY [0..9]  OF INTEGER;
    rp					  : RastPortPtr;
    mytext				  : IntuiText;


BEGIN 
  WITH MyWindow DO
    leftEdge:= 260; topEdge:= 200;  
    width:= 100; height:= 50;       
    detailPen:= 3; blockPen:= 2;    
    idcmpFlags:= IDCMPFlagSet{closeWindow,gadgetUp}; 
    flags:= WindowFlagSet{windowDrag,activate,borderless};  
    firstGadget:= ADR(gad);
    checkMark:= NIL;
    title:= NIL;
    bitMap:= NIL;
    type:= ScreenFlagSet{wbenchScreen};
    minWidth:= 100; maxWidth:= 100;
    minHeight:= 100; maxHeight:= 50;     
  END;
  WITH Rahmen DO
    leftEdge:= -1; topEdge:= -1; frontPen:= 2; backPen:= 0;
    drawMode:= jam1; count:= 5; xy:= ADR(xyFeld);
    nextBorder:= NIL;
  END;
  xyFeld[0]:=  0; xyFeld[1]:=  0;
  xyFeld[2]:= 81; xyFeld[3]:=  0;
  xyFeld[4]:= 81; xyFeld[5]:= 31;
  xyFeld[6]:=  0; xyFeld[7]:= 31;
  xyFeld[8]:=  0; xyFeld[9]:=  0;
  WITH mytext DO
    frontPen:= 1; backPen:=3; drawMode:= jam1;
    leftEdge:= 7; topEdge:= 11;
    iTextFont:= NIL; iText:= ADR(" RETURN"); 
    nextText:= NIL;
  END;
  WITH gad DO
    nextGadget:= NIL;
    leftEdge:= 10; topEdge:= 16;
    width:= 80; height:= 30;
    flags:= GadgetFlagSet{};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(Rahmen); selectRender:= NIL; 
    gadgetText:= ADR(mytext); specialInfo:= NIL;
    gadgetID:= warte;
    userData:= NIL;
  END;
  MyWindowPtr:= OpenWindow(MyWindow);
  Assert(MyWindowPtr # NIL, ADR("Fenster nicht geöffnet"));
  LOOP
    WaitPort(MyWindowPtr^.userPort); 
    IntuiMsg:= GetMsg(MyWindowPtr^.userPort);
    class:= IntuiMsg^.class;
    ReplyMsg(IntuiMsg);
    IF (class=IDCMPFlagSet{gadgetUp}) THEN
      EXIT;
    END;						(* IF 1		*)
  END 							(* LOOP 1	*);
  CloseWindow(MyWindowPtr);
   
END wartemenu;


PROCEDURE plotmenu(VAR item: CARDINAL);

  CONST
    loesch 	= 1;
    weiter 	= 2;
    haupt  	= 3;
                
  VAR 
    MyWindow    			  : NewWindow;
    MyWindowPtr         		  : WindowPtr;
    class				  : IDCMPFlagSet;
    IntuiMsg    			  : POINTER TO IntuiMessage;
    gadarray 				  : ARRAY [1..3] OF Gadget;
    rp					  : RastPortPtr;
    welches				  : POINTER TO Gadget;
    wahl,wahlh				  : Image;
    imageptr,himageptr			  : CARDPTR;
        
BEGIN 
  WITH MyWindow DO
    leftEdge:= 0; topEdge:= 0;         (* linke obere Ecke *)
    width:= 640; height:= 256;            (* Breite und Höhe *)
    detailPen:= 0; blockPen:= 0;          (* Farbregister *)
    idcmpFlags:= IDCMPFlagSet{closeWindow,gadgetUp}; 
    flags:= WindowFlagSet{};  
    firstGadget:= ADR(gadarray[1]);
    checkMark:= NIL;
    title:= ADR("PLOTTER Untermenü");
    bitMap:= NIL;
    type:= ScreenFlagSet{wbenchScreen};
    minWidth:= 640; maxWidth:= 640;
    minHeight:= 256; maxHeight:= 256;     
  END;
  CopyToChip(ADR(wahlimagedata),imageptr,wahlsize);
  CopyToChip(ADR(wahlhimagedata),himageptr,wahlhsize);
  WITH wahl DO
    leftEdge:= 0; topEdge:= 0; width:= 51; height:= 21; depth:=2;
    imageData:= imageptr; planePick:= 3; planeOnOff:= 0;
    nextImage:= NIL;
  END;
  WITH wahlh DO
    leftEdge:= 0; topEdge:= 0; width:= 51; height:= 21; depth:=2;
    imageData:= himageptr; planePick:= 3; planeOnOff:= 0;
    nextImage:= NIL;
  END;
  WITH gadarray[1] DO
    nextGadget:= ADR(gadarray[2]);
    leftEdge:= 180; topEdge:= 80;
    width:= 51; height:= 21;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh); 
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= loesch;
    userData:= NIL;
  END;
  WITH gadarray[2] DO
    nextGadget:= ADR(gadarray[3]);
    leftEdge:= 180; topEdge:= 135;
    width:= 51; height:= 21;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh); 
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= weiter;
    userData:= NIL;
   END;
   WITH gadarray[3] DO
     nextGadget:= NIL;
     leftEdge:= 180; topEdge:= 190;
     width:= 51; height:= 21;
     flags:= GadgetFlagSet{gadgImage,gadgHImage};
     activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
     gadgetType:= boolGadget;
     gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh); 
     gadgetText:= NIL; specialInfo:= NIL;
     gadgetID:= haupt;
     userData:= NIL;
   END;
   MyWindowPtr:= OpenWindow(MyWindow);
   Assert(MyWindowPtr # NIL, ADR("Fenster nicht geöffnet"));
   rp:= MyWindowPtr^.rPort;
   Move(rp,205,40);  Text(rp,ADR("P L O T T E R  -  Untermenü"),27);
   rand(rp,100,22,440,30);
   rand(rp,100,22,440,212);
   SetAPen(rp,2);
   rand(rp,104,24,432,26);
   rand(rp,104,54,432,178);
   SetAPen(rp,1);
   Move(rp,240, 96); Text(rp,ADR(". . .  SCREEN löschen"),21);
   Move(rp,240,151); Text(rp,ADR(". . .  Alten SCREEN benutzen"),28);
   Move(rp,240,205); Text(rp,ADR(". . .  Zurück ins Hauptmenü"),27);
   LOOP
     WaitPort(MyWindowPtr^.userPort); 
     IntuiMsg:= GetMsg(MyWindowPtr^.userPort);
     class:= IntuiMsg^.class;
     welches:= IntuiMsg^.iAddress;
     ReplyMsg(IntuiMsg);
     item:= CARDINAL(welches^.gadgetID);
     IF (class=IDCMPFlagSet{gadgetUp}) THEN
       EXIT;
     END 						(* IF 1		*);
   END 							(* LOOP 1	*);
   CloseWindow(MyWindowPtr);
END plotmenu;



PROCEDURE ablmenu
(VAR item: CARDINAL);

  CONST
    f  	 = 0;
    f1 	 = 1;
    f2 	 = 2;
    f3 	 = 3;    
    intf = 4; 
          
  VAR 
    MyWindow    			  : NewWindow;
    MyWindowPtr         		  : WindowPtr;
    class				  : IDCMPFlagSet;
    IntuiMsg    			  : POINTER TO IntuiMessage;
    gadarray 				  : ARRAY [1..5] OF Gadget;
    rp					  : RastPortPtr;
    welches				  : POINTER TO Gadget;    
    imageptr,himageptr			  : CARDPTR;
    wahl,wahlh				  : Image;


BEGIN 
  WITH MyWindow DO
    leftEdge:= 0; topEdge:= 0;          
    width:= 640; height:= 256;          
    detailPen:= 0; blockPen:= 0;         
    idcmpFlags:= IDCMPFlagSet{gadgetUp}; 
    flags:= WindowFlagSet{};  
    firstGadget:= ADR(gadarray[1]);
    checkMark:= NIL;
    title:= ADR("PLOTTER Untermenü");
    bitMap:= NIL;
    type:= ScreenFlagSet{wbenchScreen};
    minWidth:= 640; maxWidth:= 640;
    minHeight:= 256; maxHeight:= 256;     
  END;
  CopyToChip(ADR(wahlimagedata),imageptr,wahlsize);
  CopyToChip(ADR(wahlhimagedata),himageptr,wahlhsize);
  WITH wahl DO
    leftEdge:= 0; topEdge:= 0; width:= 51; height:= 21; depth:=2;
    imageData:= imageptr; planePick:= 3; planeOnOff:= 0;
    nextImage:= NIL;
  END;
  WITH wahlh DO
    leftEdge:= 0; topEdge:= 0; width:= 51; height:= 21; depth:=2;
    imageData:= himageptr; planePick:= 3; planeOnOff:= 0;
    nextImage:= NIL;
  END;
  WITH gadarray[1] DO
    nextGadget:= ADR(gadarray[2]);
    leftEdge:= 195; topEdge:= 55;
    width:= 51; height:= 21;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh); 
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= f;
    userData:= NIL;
  END;
  WITH gadarray[2] DO
    nextGadget:= ADR(gadarray[3]);
    leftEdge:= 195; topEdge:= 95;
    width:= 51; height:= 21;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh);
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= f1;
    userData:= NIL;
  END;
   WITH gadarray[3] DO
    nextGadget:= ADR(gadarray[4]);
    leftEdge:= 195; topEdge:= 135;
    width:= 51; height:= 21;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh); 
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= f2;
    userData:= NIL;
  END;
  WITH gadarray[4] DO
    nextGadget:= ADR(gadarray[5]);;
    leftEdge:= 195; topEdge:= 175;
    width:= 51; height:= 21;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh);
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= f3;
    userData:= NIL;
  END;
  WITH gadarray[5] DO
    nextGadget:= NIL;
    leftEdge:= 195; topEdge:= 215;
    width:= 51; height:= 21;
    flags:= GadgetFlagSet{gadgImage,gadgHImage};
    activation:= ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
    gadgetType:= boolGadget;
    gadgetRender:= ADR(wahl); selectRender:= ADR(wahlh);
    gadgetText:= NIL; specialInfo:= NIL;
    gadgetID:= intf;
    userData:= NIL;
  END;
  MyWindowPtr:= OpenWindow(MyWindow);
  Assert(MyWindowPtr # NIL, ADR("Fenster nicht geöffnet"));
  rp:= MyWindowPtr^.rPort;
  rand(rp,150,15,340,238);
  Move(rp,150,40); Draw(rp,490,40);
  Move(rp,173,30);  Text(rp,ADR("P L O T T E R  -  Ableitungseingabe"),35);
  SetAPen(rp,2);
  rand(rp,154,17,332,21);
  rand(rp,154,42,332,209);
  SetAPen(rp,1);
  Move(rp,275,69);  Text(rp,ADR(". . .    Funktion"),17);
  Move(rp,275,109); Text(rp,ADR(". . .    1. Ableitung"),21);
  Move(rp,275,149); Text(rp,ADR(". . .    2. Ableitung"),21);
  Move(rp,275,189); Text(rp,ADR(". . .    3. Ableitung"),21);
  Move(rp,275,229); Text(rp,ADR(". . .    Integralfunktion"),25);
  LOOP
    WaitPort(MyWindowPtr^.userPort); 
    IntuiMsg:= GetMsg(MyWindowPtr^.userPort);
    class:= IntuiMsg^.class;
    welches:= IntuiMsg^.iAddress;
    ReplyMsg(IntuiMsg);
    item:= CARDINAL(welches^.gadgetID);
    IF (class=IDCMPFlagSet{gadgetUp}) THEN
      EXIT;
    END 						(* IF 1		 *);
  END 							(* LOOP1 	 *);
  CloseWindow(MyWindowPtr);
END ablmenu;


END menu.


