 #include <exec/types.h>
 #include <proto/tool.h>
 #include <exec/memory.h>
 #include <graphics/gfxmacros.h>
 #include <intuition/intuition.h>
 #include <proto/exec.h>
 #include <proto/dos.h>
 #include <proto/intuition.h>
 #include <proto/graphics.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 
 LONG Open_All(VOID);
 VOID Ende(VOID);
 VOID main(VOID);
 
 struct IntuitionBase 	*IntuitionBase;
 struct GfxBase 	*GfxBase;
 struct Library 	*ToolBase;
 struct Screen 		*Screen;
 struct Window 		*Window;
 LONG MaxPos=11,MaxPos2=16;
 
 struct PropInfo PInfo=
  {
   FREEVERT|AUTOKNOB,0,MAXBODY/3,0,MAXBODY/3,0,0,0,0,0,0
  };
 struct PropInfo PInfo2=
  {
   FREEHORIZ|AUTOKNOB,MAXBODY/4,0,MAXBODY/4,0,0,0,0,0,0,0
  };
 
 struct Image HImage;
 struct Image HImage2;
 
 struct Gadget Pot =
  {
   NULL       ,15,11,20,120,GADGHCOMP,GADGIMMEDIATE|FOLLOWMOUSE,PROPGADGET,(APTR)&HImage,0,NULL,NULL,(APTR)&PInfo,1,0
  };
 
 struct Gadget Pot2 =
  {
   &Pot       ,45,31,500,20,GADGHCOMP,GADGIMMEDIATE|FOLLOWMOUSE,PROPGADGET,(APTR)&HImage2,0,NULL,NULL,(APTR)&PInfo2,2,0
  };
 
 
 struct NewScreen Schirm=
  {
   0,0,640,256,2,2,1,HIRES,CUSTOMSCREEN,NULL,NULL,NULL,NULL
  };
 
 struct NewWindow Fenster=
  {
   0,10,640,246,0,1,CLOSEWINDOW|GADGETDOWN|MOUSEMOVE,
   BORDERLESS|ACTIVATE|WINDOWCLOSE,
   &Pot2,NULL,NULL,
   NULL,
   NULL,
   NULL,
   NULL,
   NULL,
   NULL,
   CUSTOMSCREEN
  };
 
 UWORD Pattern[4]=
  {
   0xff00,0xff00,0x00ff,0x00ff
  };
 
 LONG Open_All(VOID)
  {
   IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0);
   if(!IntuitionBase)
    {
     Ende();
     return(1);
    }
   
   GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0);
   if(!GfxBase)
    {
     Ende();
     return(2);
    }
   ToolBase=OpenLibrary("tool.library",0);
   if(!ToolBase)
    {
     Ende();
     return(3);
    }
   
   Screen=OpenScreen(&Schirm);
   if(!Screen)
    {
     Ende();
     return(5);
    }
   
   Fenster.Screen=Screen;
   
   Window=OpenWindow(&Fenster);
   if(!Window)
    {
     Ende();
     return(6);
    }
   
   return(0);
  }
 
 VOID Ende(VOID)
  {
   
   /* Wenn offen -> schließen */
   if(Window)
    {
     CloseWindow(Window);
     ClearMenuStrip(Window);
    };
   
   if(Screen)CloseScreen(Screen);
   
   if(GfxBase)CloseLibrary((struct Library *)GfxBase);
   
   if(IntuitionBase)CloseLibrary((struct Library *)IntuitionBase);
   if(ToolBase)CloseLibrary(ToolBase);
   
  }
 
 VOID _main()
  {
   LONG i,ENDE=1,Nr,a,aa,ai;
   struct PropInfo *PInfo3;
   struct RastPort *RP;
   struct info msgInfo;
   char buffer[90];
   
   PInfo3=&PInfo;
   if(!Open_All())
    {
     RP=Window->RPort;
     SetDrMd(RP,JAM2);
     i=GetPropPosH(&Pot2,MaxPos2);
     a=GetPropPosV(&Pot ,MaxPos);
     sprintf(buffer,"Vert : %3ld                                   Horiz: %3ld",a,i);
     Print(RP,buffer,1,10,150);
     aa=a;
     ai=i;
     
     while(ENDE)
      {
       Wait(1L<<Window->UserPort->mp_SigBit);
       /* Arbeitet ab, bis keine Events mehr */
       while(EventAbfrage(Window,&msgInfo))
        {
         /* Verzweigt entsprechend der Events */
         switch(msgInfo.NachrichtenArt)
          {
           case CLOSEWINDOW:ENDE=0;
           break;
           case MOUSEMOVE:
           case GADGETDOWN:
            {
             Nr=((struct Gadget *)msgInfo.IAddress)->GadgetID;
             i=GetPropPosH(&Pot2,MaxPos2);
             a=GetPropPosV(&Pot ,MaxPos);
             SetPropPosH(&Pot2,Window,MaxPos2,4,i);
             SetPropPosV(&Pot ,Window,MaxPos ,3,a);
             if(aa!=a||ai!=i)
              {
               
               sprintf(buffer,"Vert : %3ld                                   Horiz: %3ld",a,i);
               Move(RP,10,150);
               ClearEOL(RP);
               Print(RP,buffer,1,10,150);
               aa=a;
               ai=i;
              }
            }
          }
        }
      }
     
     for(i=0;i<=10;i++)
      {
       SetPropPosH(&Pot2,Window,MaxPos2,4,i);
       SetPropPosV(&Pot ,Window,MaxPos ,3,i);
       i=GetPropPosH(&Pot2,MaxPos2);
       a=GetPropPosV(&Pot ,MaxPos);
       sprintf(buffer,"Vert : %3ld                                   Horiz: %3ld",a,i);
       Move(RP,10,150);
       ClearEOL(RP);
       Print(RP,buffer,1,10,150);
       
       Delay(50);
      }
     
     Delay(50);
     Ende();
    }
  }
