#include <exec/types.h>
#include <exec/exec.h>
#include <graphics/gfx.h>
#include <graphics/gfxmacros.h>
#include <graphics/copper.h>
#include <graphics/gels.h>
#include <graphics/regions.h>
#include <graphics/clip.h>
#include <graphics/text.h>
#include <graphics/gfxbase.h>
#include <graphics/view.h>
#include <hardware/dmabits.h>
#include <hardware/custom.h>
#include <hardware/blit.h>

#define DEPTH   5
#define WIDTH   320
#define HEIGHT  250

struct View MyView;
struct View *OldView;
struct ViewPort MyViewPort;
struct RasInfo MyRasInfo;
struct BitMap MyBitMap;
struct RastPort MyRastPort;
struct GfxBase *GfxBase;

USHORT i;


main()
{
 init_all();
 Delay(50*10); /* Warten */
 close_all();
}
 
init_all()
{
 if((GfxBase=OpenLibrary("graphics.library",0))==0)
    exit(FALSE);
 OldView=GfxBase->ActiView; /* alten View retten */
 InitView(&MyView); /* View-Struktur initialisieren */
 InitVPort(&MyViewPort); /* ViewPort-Struktur initialisieren */
 MyView.ViewPort=&MyViewPort;
 MyViewPort.DWidth=WIDTH;
 MyViewPort.DHeight=HEIGHT;
 MyViewPort.RasInfo=&MyRasInfo;
 InitBitMap(&MyBitMap,DEPTH,WIDTH,HEIGHT); /* BitMap initialisieren */
 MyRasInfo.BitMap=&MyBitMap; /* RasInfo-Struktur inittialisieren */
 MyRasInfo.RxOffset=0;
 MyRasInfo.RyOffset=0;
 MyRasInfo.Next=0;
 /* BitMap-Speicher allocatieren */
 for(i=0;i<DEPTH;++i)
    if((MyBitMap.Planes[i]=AllocRaster(WIDTH,HEIGHT))==0)
       exit(FALSE);
 MakeVPort(&MyView,&MyViewPort);
 MrgCop(&MyView);
 for(i=0;i<DEPTH;++i)
    BltClear(MyBitMap.Planes[i],RASSIZE(WIDTH,HEIGHT),0);
 LoadView(&MyView);
 /* Farbe initialisieren */
 SetRGB4(&MyViewPort,0,15,0,0);  /* rot */
}

 
close_all()
{
 LoadView(OldView); /* alte View-Struktur wieder initialisieren */
 for(i=0;i<DEPTH;++i)
    FreeRaster(MyBitMap.Planes[i],WIDTH,HEIGHT);
 FreeVPortCopLists(&MyViewPort);
 FreeCprList(MyView.LOFCprList);
 CloseLibrary(GfxBase);
}
