/*
 *
 * RectDemoC.c  done by Holger Gzella
 *
 * for use with Lattice C v5.04 ...
 *
 */

/* C-Includes; entsprechen im weitesten */
/* Sinne den Modula-Definitionsmodules. */

#include <exec/types.h>
#include <graphics/gfx.h>
#include <graphics/gfxbase.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>

/* Function-Prototypes; sie erlauben bei Lattice-C */
/* ab Version 4.00 das direkte Anspringen der Li-  */
/* brary-Offsets, was in Modula automatisch ge-    */
/* schieht. Ohne Verwendung der Prototypes steigt  */
/* die Länge und Ausführungszeit eines Programms   */
/* beträchtlich, da so erst Zwischencode vor den   */
/* eigentlichen Library-Aufruf gesetzt werden muß. */

#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>

/* Window definieren ... */

struct NewWindow windowDaten = {
   0,156,640,100,0,1,CLOSEWINDOW,WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE,
   NULL,NULL,"Rechteck-Demonstration (C)",NULL,NULL,0,0,0,0,
   WBENCHSCREEN,
};

/* Globale Definitionen ... */

struct GfxBase       *GfxBase;
struct IntuitionBase *IntuitionBase;

struct Window *window;
struct RastPort *rastPort;
struct IntuiMessage *nachricht;

long class;

/* Externe Assembler-Routine deklarieren ... */

extern void DrawRectangle(struct RastPort *,
                          long,long,long,long);

/* Das Hauptprogramm ... */

void main(void)
{

   /* Intuition und Graphics dürften IMMER  */
   /* zu öffnen sein, daher fangen wir hier */
   /* keinen Fehler ab.                     */

   IntuitionBase = (struct IntuitionBase *)
                    OpenLibrary("intuition.library",33);

   GfxBase = (struct GfxBase *)
              OpenLibrary("graphics.library",33);

   if ((window = (struct Window *)
                  OpenWindow(&windowDaten)) != NULL) {

       rastPort = window->RPort;

       /* Rechteck zeichnen ... */

       DrawRectangle(rastPort,15,20,350,75);

       /* Über IDCMP auf's Drücken der */
       /* linken Maustaste warten ...  */

       for (;;) {
           WaitPort(window->UserPort);
           nachricht = (struct IntuiMessage *)
           GetMsg(window->UserPort);

           class = nachricht->Class;
           ReplyMsg((struct Message *)nachricht);
           if (class == CLOSEWINDOW) break;
       }

       CloseWindow(window);
   }

   CloseLibrary((struct Library *)GfxBase);
   CloseLibrary((struct Library *)IntuitionBase);
}

