/* main */
#include <exec/types.h>
#include <stdio.h>
#include <graphics/view.h>
#include <graphics/rastport.h>
#include <proto/intuition.h>
#include "golf.h"

#ifndef NDEBUG
static int maxIt = 25;
#endif

static int DrawSpalte(int karte,int x)
{
   int y;
#ifndef NDEBUG
   if (maxIt-- == 0) {
      printf("maxIt erreicht, abbruch von DrawSpalte\n");
      return(leftImageY);
   }
#endif
   
   if (Karten[karte].vor == 255) y = leftImageY;
   else y = DrawSpalte(Karten[karte].vor,x);
   DrawImage(PlayRastPort,Karten[karte].img,x,y);
   return(y + SPALTENDY);
}

static int DrawHoriz(int karte,int y)
{
   int x;
   
   if(Karten[karte].letzte == 255) {
      DrawImage(PlayRastPort,Karten[karte].img,bottImageX,y);
      return(bottImageX+BOTTOMDX);
   }
   x = DrawHoriz(Karten[karte].letzte,y);
   DrawImage(PlayRastPort,Karten[karte].img,x,y);
   return(x + BOTTOMDX);
}

int DrawAllCards(void)
{
   int x = leftImageX;
   int spalte;
   
   for(spalte=2;spalte<AnzStapel+2;spalte++) {
#ifndef NDEBUG
      maxIt = 60;
#endif
      if (stapel[spalte] < 53) DrawSpalte(stapel[spalte],x);
      x += SPALTENDX;
   }
   if (stapel[0] < 53) DrawImage(PlayRastPort,BackImage,bottImageX-SPALTENDX,bottImageY);
   if (stapel[1] < 53) DrawHoriz(stapel[1],bottImageY);
   return(0);
}

extern struct Window *PlayWindow;
int getBackNr(void);

void selectBack(void)
{
   int x,i;

   SetAPen(PlayRastPort,0);
   RectFill(PlayRastPort,0,12,320,149);
   OffGadget(&playGad[13],PlayWindow,NULL);
   OffGadget(&playGad[14],PlayWindow,NULL);
   OffGadget(&playGad[15],PlayWindow,NULL);
   for(i=0,x=leftImageX;i<7;i++,x += SPALTENDX)
      DrawImage(PlayRastPort,&BackSides[i],x,leftImageY);
   for(x=leftImageX;i<11;i++,x += SPALTENDX)
      DrawImage(PlayRastPort,&BackSides[i],x,leftImageY+40);
   /* Jetzt eigentlich die Abfrage getBackNr() oder so */
   /*Delay(200); / 4 Sekunden */
   i = getBackNr();
   if (i >= 0) BackImage = &BackSides[i];
   SetAPen(PlayRastPort,0);
   RectFill(PlayRastPort,0,12,320,149);
   DrawAllCards();
   OnGadget(&playGad[13],PlayWindow,NULL);
   OnGadget(&playGad[14],PlayWindow,NULL);
   OnGadget(&playGad[15],PlayWindow,NULL);
}

void main(int argc,char *argv[])
{
   IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",33L);
   GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",33L);
   if (!IntuitionBase) {
      puts("keine intuition-lib.");
      exit(10);
   };
   if (!GfxBase) {
      puts("keine gfx-lib.");
      exit(10);
   };
   if (!initScreen()) {
      initCards(AnzStapel,AnzZeilen);
      DrawAllCards();
      getEvents();
      closeScreen();
   } else puts("fehler in initscreen");
   if (GfxBase) CloseLibrary((struct Library *)GfxBase);
   if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
}

