/*Screnn & Window Demo*/

#include <exec/types.h>              /*doîæczenie potrzebnych plików*/
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <functions.h>
#include <graphics/gfxbase.h>

struct IntuitionBase *IntuitionBase; /*wskaûnik do bibioteki intuition*/
struct GfxBase *GfxBase;             /*wskaûnik do bibioteki graphics*/
struct Screen *Ekran;                /*wskaûnik do struktury Screen*/
struct Window *Okno;                 /*wskaûnik do struktury Window*/
struct RastPort *RP;                 /*wskaûnik do struktury RastPort*/
struct IntuiMessage *Msg;            /*wskaûnik do struktury komunikatu*/

struct NewScreen NowyEkran=          /*struktura NewScreen*/
 {
  0,0,                  /*wsp.lewego górnego rogu */
  320,256,              /*szerokoõç,wysokoõç*/
  3,                    /*iloõç planów - 8 kolorów*/
  4,3,                  /*DetailPen,BlockPen*/
  0,                    /*standardowy tryb wyõwietlania 320*256*/
  CUSTOMSCREEN,         /*typ ekranu*/
  NULL,                 /*standardowa czcionka*/
  "Ekran - Demo",       /*tytuî ekranu*/
  NULL,                 /*brak wîasnych przeîæczników*/
  NULL,                 /*brak wîasnej mapy bitowej*/
 };

struct NewWindow NoweOkno =          /*struktura NewWindow*/
 {
  50,50,                /*wsp.lewego górnego rogu */
  200,150,              /*szerokoõç,wysokoõç*/
  6,2,                  /*DetailPen,BlockPen*/
  CLOSEWINDOW,          /*przekazywana bêdzie informacja*/
  WINDOWDRAG | WINDOWCLOSE | WINDOWSIZING | GIMMEZEROZERO | ACTIVATE,
                        /*opis zmiennej Flags w tekõcie*/
  NULL,                 /*brak wîasnych przeîæczników*/
  NULL,                 /*standardowy znacznik menu*/
  "Okno !",             /*tytuî*/
  NULL,                 /*wskaûnik do strukt. Screen*/
                        /*bêdzie wstawiony po otwarciu Screenu*/
  NULL,                 /*brak wîasnej mapy bitowej*/
  50,50,                /*min. szerokoõç i wysokoõç*/
  320,100,              /*max. szerokoõç i wysokoõç*/
  CUSTOMSCREEN,         /*okno na wîasnym ekranie*/
 };

main()                  /*procedura gîówna*/
{                       /*otwarcie potrzebnych bibliotek*/
 GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0);
 if(GfxBase==NULL) Koniec();
 IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0);
 if(IntuitionBase==NULL) Koniec();
 Ekran = OpenScreen(&NowyEkran);   /*otwarcie Ekranu*/
 if(Ekran==NULL) Koniec();
 NoweOkno.Screen = Ekran;          /*wskaûnik do ekranu wstawiamy do NewWindow*/
 Okno = OpenWindow(&NoweOkno);
 if(Okno==NULL) Koniec();          /*otwarcie okna*/
 RP=Okno->RPort;                   /*wskaþnik do RastPort'u okna*/
 Demo();
 for(;;)                           /*oczekiwanie na naciõniêcie wyîæcznika okna*/
  {
   Msg = WaitPort(Okno->UserPort);
   Msg = GetMsg(Okno->UserPort);
   if(Msg->Class==CLOSEWINDOW) Koniec();
   ReplyMsg(Msg);
  }
}

Koniec()           /*zamkniêcie wszystkiego co byîo otwarte*/
{                  /* i wyjõcie z programu*/
 if(Okno) CloseWindow(Okno);
 if(Ekran) CloseScreen(Ekran);
 if(GfxBase) CloseLibrary(GfxBase);
 if(IntuitionBase) CloseLibrary(IntuitionBase);
 exit(0);
}

Demo()
{
 int i,k;

 for(i=0;i<=70;i+=10)
  { 
   SetAPen(RP,i/10+1);
   RectFill(RP,20+i,10+i/2,167-i,130-i/2);
  }

 for(i=20;i<167;i+=10)
  for(k=1;k<=7;k++)
   {
    SetAPen(RP,k);
    Move(RP,i+3*(k-1),10);
    Draw(RP,187-(i+3*(k-1)),130);
   }
 SetAPen(RP,1);
 Move(RP,58,74);
 Text(RP,"Graf-Demo",9);
}
