#define TIEFE 6
#define BREITE 320
#define HOEHE 256
#define FARBEN 64

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

struct IntuitionBase *IntuitionBase; 
struct GfxBase *GfxBase;

#define INTUITION_REV   33  /* Versionsnummer! */
#define GRAPHICS_REV	33

/* Deklaration eines vordefinierten NewScreen Datenblocks */

struct NewScreen NewScreen =
  {
   0,			/* linke Ecke sollte 0 sein */
   0,			/* obere Ecke */
   BREITE,		/* Breite (hi-res) */
   HOEHE,		/* Hoehe (Interlace) */
   TIEFE,		/* Tiefe (1 bit plane) */
   0, 1,		/* DetailPen und BlockPen */
   EXTRA_HALFBRITE,	/* Anzeige-Modi */
   CUSTOMSCREEN,	/* Schirm-Typ */
   NULL,		/* Font */
   "Linien",		/* Schirm-Titel */
   NULL,		/* keine speziellen screen gadgets */
   NULL,		/* keine custom bit map */
  };

main()
{
  struct Screen *Screen;
  struct NewWindow NewWindow;
  struct Window *Window;	
  struct RastPort *rp;
  struct IntuiMessage *Message;
  LONG i;
  REGISTER SHORT x,y,s;
  REGISTER UBYTE z=0;

  /* Oeffnen der Library und Ueberpruefung */

  IntuitionBase = (struct IntuitionBase *)
    OpenLibrary("intuition.library",INTUITION_REV);
  if (IntuitionBase == NULL) exit(FALSE);

  GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", GRAPHICS_REV);
  if (GfxBase == NULL) exit(FALSE);

  if ((Screen = (struct Screen *)OpenScreen(&NewScreen)) == NULL) exit(FALSE);

  /* Initialisieren der NewWindow structure fuer den OpenWindow()-Aufruf */

  NewWindow.LeftEdge = 0;
  NewWindow.TopEdge = 0;
  NewWindow.Width = BREITE;
  NewWindow.Height = HOEHE;
  NewWindow.DetailPen = 0;
  NewWindow.BlockPen = 1;
  NewWindow.Title = "64 colours by Mephistopheles";
  NewWindow.Flags = WINDOWCLOSE|ACTIVATE|WINDOWDRAG|WINDOWDEPTH|WINDOWSIZING|
     NOCAREREFRESH|GIMMEZEROZERO;
  NewWindow.IDCMPFlags = CLOSEWINDOW;
  NewWindow.Type = CUSTOMSCREEN;
  NewWindow.FirstGadget = NULL;
  NewWindow.CheckMark = NULL;
  NewWindow.Screen = Screen;
  NewWindow.BitMap = NULL;
  NewWindow.MinWidth = 100;
  NewWindow.MinHeight = 50;
  NewWindow.MaxWidth = BREITE;
  NewWindow.MaxHeight = HOEHE;

  if (( Window = (struct Window *)OpenWindow(&NewWindow)) == NULL) exit(FALSE);

  rp=Window->RPort;	/* RastPort-Adresse */
  SetDrMd(rp,JAM2);	/* Zeichenmodus */
  do {
    if (s<HOEHE) s++;
    else s=1;
    for(x=0,y=0; x<BREITE; x+=s) {
	SetAPen(rp,++z/4);
	Move(rp,x,y);
	Draw(rp,BREITE-x,HOEHE);
    }
    for(x=0,y=HOEHE; y>=0; y-=s) {
	SetAPen(rp,++z/4);
	Move(rp,x,y);
	Draw(rp,BREITE,HOEHE-y);
    } 
    Message=(struct IntuiMessage *)GetMsg(Window->UserPort);
    if(Message->Class==CLOSEWINDOW)
      break;
  } while (Message->Class!=CLOSEWINDOW); 
  CloseWindow(Window);
  CloseScreen(Screen);
  exit(TRUE);
}

