(*-------------------------------------------------------------------------

   :Program.    SunDown.mod
   :Author.     Pit + Mike Burkhardt
   :Address.    Stettinerstraße 25 7030 Böblingen
   :Address.    Breslauerstraße 28 7332 Eislingen
   :Shortcut.   [pit]
   :History.    V1.0, 11-Mar-88, M2-Version von Pit und Mike (AMOK#1)
   :History.    V2.0, 08-Feb-90, Oberon-Verion, Fridtjof Siebert
   :Copyright.  PD
   :Language.   Oberon
   :Translator. AMOK Oberon Compiler
   :Contents.   Workbench-Copper-Demo

-------------------------------------------------------------------------*)

MODULE SunDown;

IMPORT g:  Graphics,
       I:  Intuition,
       h:  Hardware,
       e:  Exec,
       sys:SYSTEM;

VAR
  w:     I.WindowPtr;
  rp:    g.RastPortPtr;
  vp:    g.ViewPortPtr;
  cl:    g.UCopListPtr;
  clalt: g.UCopListPtr;
  nw:    I.NewWindow;

PROCEDURE OpenAll;      (* Fenster öffnen, Zeiger initialisieren *)
BEGIN
  vp := NIL;
  nw.leftEdge   := 450; nw.topEdge  := 5;
  nw.width      := 100; nw.height   := 20;
  nw.detailPen  := -1;  nw.blockPen := -1;
  nw.idcmpFlags := LONGSET{I.closeWindow};
  nw.flags      := LONGSET{I.windowDrag, I.windowClose, I.activate};
  nw.title      := sys.ADR('SunDown');
  nw.screen     := NIL;
  nw.type       := {I.wbenchScreen};
  nw.firstGadget:= NIL; nw.checkMark:=NIL; nw.bitMap:=NIL;
  w := I.OpenWindow(nw);
  IF w=NIL THEN HALT(20) END;
  rp := w.rPort;
  vp := sys.ADR(w.wScreen.viewPort);
END OpenAll;


PROCEDURE InitAll;      (* Copperlist erstellen *)

VAR i: INTEGER;

BEGIN
  cl := e.AllocMem(sys.SIZE(cl^), LONGSET{e.chip, e.memClear});
  IF cl=NIL THEN HALT(20) END;
  g.CWAIT(cl, 0,0);
  g.CMOVE(cl, sys.ADR(h.custom.color[0]),0FH);
  i := 0;
  REPEAT
    g.CWAIT(cl, 20+i*4,0);
    g.CMOVE(cl, sys.ADR(h.custom.color[0]),0FH-i+100H*i); INC(i);
  UNTIL i>9;
  REPEAT
    g.CWAIT(cl, 36+i*2,0);
    g.CMOVE(cl, sys.ADR(h.custom.color[0]),0FH-i+100H*i); INC(i);
  UNTIL i>15;
  i := 0;
  REPEAT
    g.CWAIT(cl, 66+i,0);
    g.CMOVE(cl, sys.ADR(h.custom.color[0]),0F00H+10H*i); INC(i);
  UNTIL i>7;
  g.CWAIT(cl, 73, 0);
  g.CMOVE(cl, sys.ADR(h.custom.color[0]), 0H);
  g.CMOVE(cl, sys.ADR(h.custom.color[2]), 444H);
  g.CEND (cl);
  clalt      := vp.uCopIns;
  vp.uCopIns := cl;
  I.RethinkDisplay;
END InitAll;

BEGIN

  w:=NIL;
  OpenAll;
  InitAll;
  e.WaitPort(w^.userPort);

CLOSE

  vp.uCopIns:=clalt;
  I.RethinkDisplay;
  IF cl#NIL THEN
    g.FreeCopList(cl.firstCopList);
    e.FreeMem(cl,sys.SIZE(cl^));
  END;
  IF w#NIL  THEN I.CloseWindow(w) END;

END SunDown.

