/*************************************************************************/
/* Beispiel zur Verwendung der iff.c-Routinen zum Speichern eines Bildes */
/*************************************************************************/


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

#define WIDTH 320
#define HEIGHT 250
#define XSTEP 3
#define YSTEP 3

extern short save();

struct RastPort *rp;           /* Zeiger auf den RastPort         */
struct ViewPort *vp;           /* Zeiger auf den ViewPort         */
struct Screen *MyScreen;       /* Pointer auf die Screen-Struktur */
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;

/* Nun wird der NewScreen-Struktur definiert */
struct NewScreen MyNewScreen=
 {0,0,WIDTH,HEIGHT,5,15,0,0,CUSTOMSCREEN,0,0,0,0};


short i,x=1,y=1,col=1;



/* Beispiel zum Speichern eines Bildes unter Verwendung der IFF-Routinen */
/* Angabe des Filenamen aus dem CLI                                      */
main(argc,arg)
short argc;
char  *arg[];
{
 if(argc!=2)
 {
    printf("Eingabe: %s [FILE]\n",arg[0]);
    exit(FALSE);
 }
 Open_all();
 Draw_demo();
 /* kompremiertes Speichern des Demo-Bildes */
 if(save(arg[1],1,MyScreen)==FALSE)
    printf("Bild kann nicht gespeichert werden!\n");
 Close_all();
}


Open_all()
{
 if((IntuitionBase=OpenLibrary("intuition.library",0))==0)
    Close_all();
 if((GfxBase=OpenLibrary("graphics.library",0))==0)
    Close_all();
 if((MyScreen=OpenScreen(&MyNewScreen))==0)
    Close_all();
 rp=&(MyScreen->RastPort);
 vp=&(MyScreen->ViewPort);
 Set_colors();
}

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

Set_colors()
{
 for(i=0;i<16;++i) SetRGB4(vp,i,i,0,0);
 for(i=0;i<16;++i) SetRGB4(vp,i+16,15,0,i);
}


Draw_demo()
{
 while(MyScreen->TopEdge<100)
 {
    x+=XSTEP; y+=YSTEP;
    if(x>=WIDTH-1) {x=1;++col;}
    if(y>=HEIGHT-1) {y=1;++col;}
    if(col>31) col=1;
    SetAPen(rp,col);
    Move(rp,x,0); Draw(rp,WIDTH-x-1,HEIGHT-1);
    SetAPen(rp,31-col);
    Move(rp,0,y); Draw(rp,WIDTH-1,HEIGHT-y-1);
 }
}
