/***************************************************************************/
/* Beispiel 4 für einen Extra-Halfbrite-Screen.                            */
/* Geschrieben von Peter Fischer für das Diskettenmagazin GetIt.           */
/* Springe, 24.12.1988                                                     */
/*                                                                         */
/* Es bestehen KEINE Copyrights, es darf also alles benutzt werden, was in */
/* diesem Sourcefile im weiteren folgt.                                    */
/***************************************************************************/

#include <intuition/intuition.h>
#include <intuition/screens.h>
#include <graphics/gfx.h>

#define FEHLER                  1L    /* Fehlerflag ( was sonst ? ) */

/* Die Initialisierung erfolgt für den Fall eines Fehlers */
struct Intuitionbase *IntuitionBase = NULL;
struct GfxBase *GfxBase = NULL;

struct NewScreen NewScr =
{ 0,0,320,256,                             /* Größe des Screens */
  6,                                       /* Tiefe des Screens */
  31,27,                                   /* Grund-Farben */
  EXTRA_HALFBRITE,                         /* besonderer ViewMode */
  CUSTOMSCREEN,                            /* eigner Screen */
  NULL,                                    /* kein alternativer Font */
  "Dies ist ein bunter Screen - WOW !",    /* Titelzeile */
  NULL,                                    /* keine Gadgets */
  NULL                                     /* keine eigenen BitMaps */
};

struct Screen *Scr = NULL;

int Farbe[32][3] =              /* Werte für die Farben */
{ {  8, 0, 0 },{ 10, 0, 0 },{ 12, 0, 0 },{ 14, 0, 0 },
  {  0, 8, 0 },{  0,10, 0 },{  0,12, 0 },{  0,14, 0 },
  {  0, 0, 8 },{  0, 0,10 },{  0, 0,12 },{  0, 0,14 },
  {  8, 8, 0 },{ 10,10, 0 },{ 12,12, 0 },{ 14,14, 0 },
  {  8, 0, 8 },{ 10, 0,10 },{ 12, 0,12 },{ 14, 0,14 },
  {  0, 8, 8 },{  0,10,10 },{  0,12,12 },{  0,14,14 },
  {  8, 8, 8 },{ 10,10,10 },{ 12,12,12 },{ 14,14,14 },
  { 14, 8, 8 },{ 12,10,10 },{  8,14,14 },{  2, 2, 2 }
};

main()
{ int i;

  IntuitionBase = OpenLibrary ( "intuition.library",0 );
  if ( IntuitionBase == NULL )
  { printf ( "FATALER FEHLER : intuition.library läßt sich nicht öffnen !\n" );
    notaus ( FEHLER );
  }

  GfxBase = OpenLibrary ( "graphics.library",0 );
  if ( GfxBase == NULL )
  { printf ( "FATALER FEHLER : graphics.library läßt sich nicht öffnen !\n" );
    notaus ( FEHLER );
  }

  Scr = OpenScreen ( &NewScr );     /* Öffnen des Screens ! */
  if ( Scr == NULL )
  { printf ( "FATALER FEHLER : Der Screen läßt sich nicht öffnen !\n" );
    notaus ( FEHLER );
  }

  for ( i = 0; i < 32; i++ )        /* 32 (!) Farben setzen */
    SetRGB4 ( &(Scr->ViewPort),i,Farbe[i][0],Farbe[i][1],Farbe[i][2] );

  SetDrMd ( &(Scr->RastPort),JAM1 );
  for ( i = 0; i < 64; i++ )        /* 64 (!) Farben benutzen */
  { SetAPen ( &(Scr->RastPort),i );
    Move ( &(Scr->RastPort),( i / 8 ) * 35 + 10,( i % 8 ) * 15 + 40 );
    Text ( &(Scr->RastPort),"GetIt",5 );
  }

  for ( i = 0; i < 10; i++ )  /* Screen blinkt */
  { DisplayBeep ( Scr );
    Delay ( 10 );
  }

  while ( Scr->TopEdge == 0 );
  printf ( "Das war's !\n\n" );
  notaus ( NULL );
}

notaus ( fehler )
int fehler;
{ if ( IntuitionBase != NULL )
    CloseLibrary ( IntuitionBase );
  if ( GfxBase != NULL )
    CloseLibrary ( GfxBase );
  if ( Scr != NULL )
    CloseScreen ( Scr );
  if ( fehler )
    exit ( 20 );
  else
    exit ( 0 );
}

