/**************************************************************************/
/* Beispiel fuer die Initialisierung, Installation und Abfrage von Menus  */
/*                                                                        */
/* fuer Markt&Technik von H. Knappe                                       */
/**************************************************************************/

#include <exec/types.h>
#include <intuition/intuition.h>

#define ON ITEMTEXT|ITEMENABLED|HIGHCOMP|CHECKIT|CHECKED|COMMSEQ
#define OFF ITEMTEXT|ITEMENABLED|HIGHCOMP|COMMSEQ
#define OFFN ITEMTEXT|ITEMENABLED|HIGHCOMP

/* Definitionen der Menu-, Item-, SubItemnamen */
struct IntuiText Ende_Text={3,1,COMPLEMENT,1,1,0,"Ende",0};
struct IntuiText F1_Text={3,1,COMPLEMENT,3,1,0,"  320x200",0};
struct IntuiText F2_Text={3,1,COMPLEMENT,3,1,0,"  640x200",0};
struct IntuiText F3_Text={3,1,COMPLEMENT,3,1,0,"  320x400",0};
 struct IntuiText Funk1_Text={3,1,COMPLEMENT,1,1,0,"z^3-1=0",0};
 struct IntuiText Funk2_Text={3,1,COMPLEMENT,1,1,0,"z^2-c",0};
struct IntuiText Funk_Text={3,1,COMPLEMENT,1,1,0,"Funktion",0};

/* 2. Menu */
struct MenuItem MenuItem4=
 {0,0,33,113,10,OFF,0,&F3_Text,0,'3',0,0};
struct MenuItem MenuItem3=
 {&MenuItem4,0,22,113,10,OFF,0,&F2_Text,0,'2',0,0};
struct MenuItem MenuItem2=
 {&MenuItem3,0,11,113,10,OFF,0,&F1_Text,0,'1',0,0};
 struct MenuItem SubItem2=
  {0,98,1,90,10,OFFN,0,&Funk2_Text,0,0,0,0};
 struct MenuItem SubItem1=
  {&SubItem2,98,-8,90,10,OFFN,0,&Funk1_Text,0,0,0,0};
struct MenuItem MenuItem1=
 {&MenuItem2,0,0,113,10,OFFN,0,&Funk_Text,0,0,&SubItem1,0};

/* 1. Menu */
struct MenuItem MenuItem5=
 {0,0,0,75,10,OFFN,0,&Ende_Text,0,0,0,0};

struct Menu Menu2=
 {0,80,0,75,0,MENUENABLED,"Format",&MenuItem1};
struct Menu Menu1=
 {&Menu2,0,0,75,0,MENUENABLED,"Projekt",&MenuItem5};

struct NewWindow MyNewWindow=
 {59,42,324,76,0,1,MENUPICK+CLOSEWINDOW,WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+
 ACTIVATE+NOCAREREFRESH,0,0,"Test-Window",0,0,50,50,640,200,WBENCHSCREEN};

struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct IntuiMessage *MyMessage;
struct Window *MyWindow;



main()
{
 ULONG class;
 USHORT code;
 int bool=0,menu,item,subitem;

 /* Oeffnen der Libraries und des Windows */
 if((GfxBase=OpenLibrary("graphics.library",29))==0)
    exit(FALSE);
 if((IntuitionBase=OpenLibrary("intuition.library",29))==0)
 {
    CloseLibrary(GfxBase);
    exit(FALSE);
 }
 if((MyWindow=OpenWindow(&MyNewWindow))==0)
 {
    CloseLibrary(IntuitionBase);
    CloseLibrary(GfxBase);
    exit(FALSE);
 }

 SetMenuStrip(MyWindow,&Menu1); /* MenuLeiste wird installiert */
 Move(MyWindow->RPort,15,20);
 Text(MyWindow->RPort,"Window mit Menues",15);
 
 for(;;)
 {
    /* Warten bis etwas geschieht */
    while((MyMessage=GetMsg(MyWindow->UserPort))==0);
    class=MyMessage->Class;
    code=MyMessage->Code;
    switch(class)
    {
        /* was ist geschehen? */
        case CLOSEWINDOW: CloseWindow(MyWindow);
                          CloseLibrary(IntuitionBase);
                          CloseLibrary(GfxBase);
                          exit(TRUE);
        case MENUPICK:    menu=MENUNUM(code);
                          item=ITEMNUM(code);
                          subitem=SUBNUM(code);
                          switch(menu)
                          {
                              case 0: CloseWindow(MyWindow);
                                      CloseLibrary(IntuitionBase);
                                      CloseLibrary(GfxBase);
                                      exit(TRUE);
                                      break;
                              case 1: switch(item)
                              {
                                  case 0: switch(subitem)
                                  {
                                     case 0: printf("Funktion z^3-1=0\n");
                                             break;
                                     case 1: printf("Funktion z^2-c\n");
                                             break;
                                  }
                                  break;
                                  case 1: printf("Format 1\n");
                                          break;
                                  case 2: printf("Format 2: %d\n",bool);
                                          bool-=1;
                                          bool=-bool;
                                          if(bool==1)
                                              MenuItem3.Flags=ON;
                                          if(bool==0)
                                              MenuItem3.Flags=OFF;
                                          break;
                                  case 3: printf("Format 3\n");
                                          break;
                              }
                              break;
                          }
    }
 }
}
