/**************************************************************************/
/* C.c                                                         15.01.88   */
/* Version 1.0                                                            */
/*                                                                        */
/* C-Kurve                                                                */
/*                                                                        */
/*                                                                        */
/* fuer Markt+Technik geschrieben von Heiko Knappe                        */
/*                                                                        */
/* Komplexe Dynamische Systeme                                            */
/**************************************************************************/


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


#define WIDTH  640         /* Screen Modus                     */
#define HEIGHT 500
#define DEPTH  1
#define FLAGS  HIRES+LACE


#define SEITE 5          /* Startwerte */
#define STARTWINKEL 0
#define GRAD  10
#define XSTART 200
#define YSTART 200


extern short 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=XSTART,y=YSTART,winkel=STARTWINKEL;


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

main(argc,argv)
int argc;
char *argv[];
{
 open_things();
 c_(GRAD,SEITE);
 save("C.pic",1,MyScreen);
 close_things();
}


/***********************/
/* Initialisierung     */
/***********************/

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);
 Move(rp,x,y);
 SetRGB4(&(MyScreen->ViewPort),0,0,0,0);
 SetRGB4(&(MyScreen->ViewPort),1,15,0,0);
} 

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


/***********************/
/* Berechnung          */
/***********************/

c_(grad,seite)
short grad,seite;
{
 if(MyScreen->TopEdge>100) return(1);
 if(grad==0)
 {
    forward(seite);
 }
 else
 {
    c_(grad-1,seite); turn(90);
    c_(grad-1,seite); turn(-90);
 }
}

forward(step)
short step;
{
 x+=step*cos((float)winkel*PI/180);
 y+=step*sin((float)winkel*PI/180);
 if(x>=0&&x<WIDTH&&y>=0&&y<HEIGHT) Draw(rp,x,y);
}

backward(step)
short step;
{
 forward(-step);
}

turn(a)
short a;
{
 winkel=(winkel+a)%360;
}


