 /********************************************************************/
 /****                                                            ****/
 /****                                                            ****/
 /****    Program          : Intui2.c                             ****/
 /****                                                            ****/
 /****    Version          : 01.00                                ****/
 /****                                                            ****/
 /****    Erstversion      : 01.07.1990                           ****/
 /****                                                            ****/
 /****    Letzte Änderung  : 08.08.1990                           ****/
 /****                                                            ****/
 /****    Compiliert mit   : siehe MAKEFILE                       ****/
 /****                                                            ****/
 /****    Gelinkt mit      : siehe MAKEFILE                       ****/
 /****                                                            ****/
 /********************************************************************/
 /****                                                            ****/
 /****                                                            ****/
 /****               Copyright by Rüdiger Dreier                  ****/
 /****                                                            ****/
 /****                                                            ****/
 /********************************************************************/
 
 char Gleichungen[4],Variablen[4];
 struct Window *Window2;
 extern LONG Breite,Hoehe;
 
 SHORT paare3[]=
  {
   0,0,0,9,33,9,33,0,0,0
  };
 SHORT paare1[]=
  {
   -2,-2,122,-2,122,10,-2,10,-2,-2
  };
 struct Border Rand=
  {
   0,0,2,3,JAM2,5,(SHORT *)&paare1,NULL
  };
 struct Border Rand1 =
  {
   -1,-1,2,3,JAM2,5,paare3,0
  };
 
 struct IntuiText Bedeutung2=
  {
   1,0,JAM1,-110,0,NULL,"Gleichungen:",NULL
  };
 struct IntuiText Bedeutung1=
  {
   1,0,JAM1,-110,0,NULL,"Variablen  :",NULL
  };
 
 struct StringInfo VariablenString=
  {
   Gleichungen,NULL,0,3,0,0,5,0,0,0,NULL,0,NULL
  };
 struct StringInfo GleichungenString=
  {
   Variablen,NULL,0,3,0,0,5,0,0,0,NULL,0,NULL
  };
 
 struct IntuiText Texte=
  {
   2,3,JAM2,0,0,0," OK ",0
  };
 
 struct Gadget OKgadget=
  {
   NULL    ,86,70,32,8,GADGHCOMP,RELVERIFY|GADGIMMEDIATE,BOOLGADGET,(APTR)&Rand1,0,&Texte,NULL,NULL,4,0
  };
 struct Gadget gadget2=
  {
   &OKgadget,140,30,32,8,GADGHCOMP,GADGIMMEDIATE|RELVERIFY|STRINGCENTER|LONGINT,STRGADGET,(APTR)&Rand1,0,&Bedeutung2,0,(APTR)&GleichungenString,1,0 
  };
 struct Gadget gadget1=
  {
   &gadget2 ,140,45,32,8,GADGHCOMP,GADGIMMEDIATE|RELVERIFY|STRINGCENTER|LONGINT,STRGADGET,(APTR)&Rand1,0,&Bedeutung1,0,(APTR)&VariablenString,0,0 
  };
 
 struct NewWindow Fenster2=
  {
   210,110,200,90,0,1,GADGETUP,ACTIVATE|WINDOWDRAG,
   &gadget1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
   CUSTOMSCREEN
  };
 
 
 VOID NeueWerte(VOID)
  {
   USHORT GadgetID;
   SHORT ENDE=1;
   
   VariablenString.LongInt  =0;
   VariablenString.BufferPos=0;
   GleichungenString.LongInt=0;
   GleichungenString.BufferPos=0;
   Gleichungen[0]=0;
   Variablen[0]=0;
   
   if(!(Window2=(struct Window *)OpenWindow(&Fenster2)))return;
   
   ActivateGadget(&gadget2,Window2,NULL); /* Direkte Eingabe ermöglichen */
   
   while(ENDE)
    {
     Wait(1L<<Window2->UserPort->mp_SigBit);
     while(EventAbfrage(Window2,&msgInfo))
      {
       /* Es gibt nur das Ereignis GADGETDOWN */
       GadgetID=((struct Gadget *)msgInfo.IAddress)->GadgetID;
       switch(GadgetID)
        {
         case 1:
          {
           ActivateGadget(&gadget1,Window2,NULL);
           break;
          }
         case 4:
         case 0:            
          {
           if(GleichungenString.LongInt<=10 && VariablenString.LongInt<=7 &&
              GleichungenString.LongInt>  0 && VariablenString.LongInt >0)
            {
             ENDE=0;
            }
           else
            {
             ActivateGadget(&gadget2,Window2,NULL);
            }
           break;
          }
        }
      }
    }
   Spalten=VariablenString.LongInt+1;
   Zeilen =GleichungenString.LongInt;
   Breite=620/Spalten;
   Hoehe =80/Zeilen;
   CloseWindow(Window2);
  }
 
 
 #define CANCELID FALSE
 #define OKID     TRUE
 
 SHORT Paare1[]=
  {
   -1,-1,48,-1,48,8,-1,8,-1,-1
  };
 SHORT Paare2[]=
  {
   0,0,320,0,320,98,0,98,0,0
  };
 SHORT Paare3[]=
  {
   -2,-2,280,-2,280,9,-2,9,-2,-2
  };
 
 char __FileName[40],__UFileName[40];
 
 struct Border textrand=
  {
   0,0,1,2,JAM2,5,Paare1,NULL
  };
 struct Border Reqrand =
  {
   0,0,1,2,JAM2,5,Paare2,NULL
  };
 struct Border filerand=
  {
   0,0,1,2,JAM2,5,Paare3,NULL
  };
 
 struct StringInfo __FileNameInfo =
  {
   __FileName,__UFileName,0,40,0,0,0,0,0,0,0,0,0
  };
 
 struct IntuiText oktext    =
  {
   1,3,JAM2,0,0,NULL,"  OK  ",0
  };
 struct IntuiText canceltext=
  {
   1,3,JAM2,0,0,NULL,"Cancel",0
  };
 struct IntuiText Reqtext3  =
  {
   1,3,JAM2,25,45,NULL,NULL,0
  };
 struct IntuiText Reqtext2  =
  {
   1,3,JAM1,25,30,NULL,"Geben Sie den Namen des Files ein:",&Reqtext3
  };
 struct IntuiText Reqtext   =
  {
   1,3,JAM2,104,15,NULL,"File-Requester",&Reqtext2
  };
 
 struct Gadget filegadget   =
  {
   0          ,20,65,280,8,SELECTED|GADGHCOMP,STRINGCENTER|GADGIMMEDIATE|RELVERIFY,REQGADGET|STRGADGET ,(APTR)&filerand,NULL,NULL       ,0,(APTR)&__FileNameInfo,OKID       ,0
  };
 struct Gadget okgadget     =
  {
   &filegadget,20,80,48,8, GADGHCOMP,GADGIMMEDIATE|RELVERIFY,REQGADGET|BOOLGADGET,(APTR)&textrand,NULL,&oktext    ,0,0                               ,OKID    ,0
  };
 struct Gadget cancelgadget =
  {
   &okgadget  ,252,80,48,8,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,REQGADGET|BOOLGADGET,(APTR)&textrand,NULL,&canceltext,0,0                               ,CANCELID,0
  };
 
 struct Requester Req=
  {
   0,20,20,321,99,0,0,&cancelgadget,&Reqrand,&Reqtext,0,2,0,0,0
  };
 
 SHORT FileRequest(struct Window *Window,
                   char *ReqText,
                   SHORT x,
                   SHORT y,
                   char *Ziel)
  {
   SHORT laenge,ENDE=1;
   long Rueckgabe;
   
   Req.LeftEdge=x;
   Req.TopEdge=y;
   
   laenge=strlen(ReqText)*8;
   Reqtext3.LeftEdge=(321-laenge)/2;
   Reqtext3.IText=ReqText;
   
   Request(&Req,Window);
   
   Delay(5);
   ActivateGadget(&filegadget,Window,&Req);
   while(ENDE)
    {
     Wait(1L<<Window->UserPort->mp_SigBit);
     while(laenge=EventAbfrage(Window,&msgInfo))
      {
       Rueckgabe=((struct Gadget *)msgInfo.IAddress)->GadgetID;
       if(laenge==GADGETUP)
        {
         ENDE=0;
        }
      }
    }
   EndRequest(&Req,Window);
   
   if(Rueckgabe==OKID)
    {
     strcpy(Ziel,__FileName);
     return(TRUE);
    }
   else
    {
     strcpy(Ziel,"");
     return(FALSE);
    }
  }
 
