/*************************************************************************/
/*                                                                       */
/* C-Beispielprogramm für die Get-It ( Diskettenmagazin der AIT-UG )     */
/*                                                                       */
/* Kurs 2 : Fenster-Funktionen                                           */
/* Datum : 11.1.89                                                       */
/*                                                                       */
/* Keine Copyrights irgendwelcher Art auf die folgenden Zeilen.          */
/*                                                                       */
/*************************************************************************/

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

char Nachricht[][50] =
{ "intuition.library läßt sich nicht öffnen !\n",
  "graphics.library läßt sich nicht öffnen !\n",
  "Screen läßt sich nicht öffnen !\n",
  "Fenster läßt sich nicht öffnen !\n"
};

struct IntuitionBase *IntuitionBase = NULL;
struct GfxBase *GfxBase = NULL;

struct NewScreen NewScr =
{ 0,0,640,512,                             /* Größe des Screens */
  2,                                       /* Tiefe des Screens */
  0,1,                                     /* Farben */
  LACE | HIRES,                            /* besondere ViewModes */
  CUSTOMSCREEN,                            /* eigner Screen */
  NULL,                                    /* kein alternativer Font */
  "Dies ist ein großer Screen - WOW !",    /* Titelzeile */
  NULL,                                    /* keine Gadgets */
  NULL                                     /* keine eigenen BitMaps */
};

struct Screen *Scr = NULL;

struct NewWindow NeuFenster =
{ 50,40,
  540,176,
  0,1,
  MOUSEBUTTONS,
  WINDOWCLOSE | WINDOWSIZING | NOCAREREFRESH | RMBTRAP,
  NULL,
  NULL,
  " Peter's Laboratorium",
  NULL,
  NULL,
  300,10,
  640,256,
  CUSTOMSCREEN
};

struct Window *Fenster = NULL;

UBYTE NoPtr[] = {0,0,0,0};

main()
{ int i;

  IntuitionBase = OpenLibrary ( "intuition.library",0 );
  if ( IntuitionBase == NULL )
    notaus ( Nachricht[0] );

  GfxBase = OpenLibrary ( "graphics.library",0 );
  if ( GfxBase == NULL )
    notaus ( Nachricht[1] );

  Scr = OpenScreen ( &NewScr );
  if ( Scr == NULL )
    notaus ( Nachricht[2] );

  NeuFenster.Screen = Scr;

  Fenster = OpenWindow( &NeuFenster );
  if ( Fenster == NULL )
    notaus ( Nachricht[3] );

  Schreib ( 10,20,"Bei Blitzen des Screens mit ( rechter ) Maustaste weiter !" );

  Schreib ( 10,30,"Aktiviere Fenster !" );
  ActivateWindow ( Fenster );
  Bipp();

  Schreib ( 10,40,"Bewege Fenster !" );
  for ( i = 1; i < 10; i += 2 )
  { MoveWindow ( Fenster,i,i );
    Delay ( 20 );
  }
  Bipp();
  Delay ( 25 );
  MoveWindow ( Fenster,-75,-40 );

  Schreib ( 10,50,"Verändere die Größe !" );
  SizeWindow ( Fenster,100,40 );
  Delay ( 25 );
  Bipp();

  Schreib ( 10,60,"Lösche den Pointer !" );
  SetPointer ( Fenster,&NoPtr[0],0,0,0,0 );
  Bipp();

  Schreib ( 10,70,"Nochmal Mausklick, dann ist der Pointer wieder da !" );
  Bipp();
  ClearPointer ( Fenster );

  Schreib ( 10,85,"Wenn jetzt der Pointer aus dem Fenster herausgeführt und" );
  Schreib ( 10,95,"das Fenster deaktiviert wird, so wird das Programm beendet !" );
  ModifyIDCMP ( Fenster,INACTIVEWINDOW );
  Bipp();

  notaus( NULL );
}

notaus ( txt )
char *txt;
{ if ( txt != NULL )
    printf ( txt );
  if ( Fenster != NULL )
    CloseWindow ( Fenster );
  if ( Scr != NULL )
    CloseScreen ( Scr );
  if ( GfxBase != NULL )
    CloseLibrary ( GfxBase );
  if ( IntuitionBase != NULL )
    CloseLibrary ( IntuitionBase );
  if ( txt != NULL )
    exit ( 100 );
  exit ( 0 );
}

Schreib ( x,y,string )
int x,y;
char *string;
{ Move ( Fenster->RPort,x,y );
  SetDrMd ( Fenster->RPort,JAM2 );
  Text ( Fenster->RPort,string,strlen(string) );
}

Bipp ()
{ DisplayBeep ( Scr );
  Wait ( 1 << Fenster->UserPort->mp_SigBit );
}
