/**************************************************************************/
/* Kreis.c                                                     20.01.88   */
/* Version 1.0                                                            */
/*                                                                        */
/*                                                                        */
/* fuer Markt+Technik geschrieben von Heiko Knappe                        */
/**************************************************************************/


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

#define WIDTH  320         /* Screen Modus                     */
#define HEIGHT 250
#define DEPTH  5
#define FLAGS  0

extern save();


struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct Screen *MyScreen;
struct RastPort *rp;
struct NewScreen MyNewScreen=
 {0,0,WIDTH,HEIGHT,DEPTH,1,0,FLAGS,CUSTOMSCREEN,0,0,0,0};

short x,y,z;            /* absolute Punktkoordinaten */
float str,sti,r0=-20,i0=-20,r,i,rrange=80,irange=80;


/***********************/
/* Hauptprogramm       */
/***********************/

main(argc,argv)
int argc;
char *argv[];
{
 open_things();
 zeichnen();
 while(MyScreen->TopEdge<100);
 save("Kreis.pic",1,MyScreen);
 close_things();
}


/***********************/
/* Initialisierungs-   */
/* routinen            */
/***********************/

open_things()
{
 if((IntuitionBase=OpenLibrary("intuition.library",0))==0)
    close_things();
 if((GfxBase=OpenLibrary("graphics.library",0))==0)
    close_things();
 if((MyScreen=OpenScreen(&MyNewScreen))==0)
    close_things();
 rp=&(MyScreen->RastPort);
 init_colors();
} 

close_things()
{
 if(IntuitionBase!=0) CloseLibrary(IntuitionBase);
 if(GfxBase!=0) CloseLibrary(GfxBase);
 if(MyScreen!=0) CloseScreen(MyScreen);
 exit(0);
} 

init_colors()
{
 int i;

 for(i=0;i<16;++i)
    SetRGB4(&(MyScreen->ViewPort),i,i,0,0);
 for(i=16;i<32;++i)
    SetRGB4(&(MyScreen->ViewPort),i,31-i,0,31-i);
}


/***********************/
/* Grafik zeichnen     */
/***********************/

zeichnen()
{
 str=rrange/WIDTH,sti=irange/HEIGHT;
 for(x=0;x<WIDTH;++x)
 {
    r=r0+x*str;
    for(y=0;y<HEIGHT;++y)
    {
       if(MyScreen->TopEdge>100) return(0);
       i=i0+y*sti;
       z=(short)(i*i+r*r);
       SetAPen(rp,z%32);
       WritePixel(rp,x,y); 
    }
 } 
}
