(***************************************************************************
:Program.     DrawModesTest
:Contents.    Zeigt 8 verschiedene DrawModes-Kombinations-Möglichkeitem
:Author.      Bernd Eisele
:Copyright.   Public Domain
:Language.    Modula-2
:Translator.  M2AMiga V 4.0d
:Address.     Pestalozzistr. 24 W-7104 Obersulm 2 Germany
:Phone.       07134/3885
:Remark.      Sehr simples Programm
****************************************************************************)

MODULE DrawModesTest;

FROM SYSTEM       IMPORT ADR,ASSEMBLE;
FROM Arts         IMPORT Assert;
FROM ExecL	  IMPORT WaitPort;
FROM GraphicsL    IMPORT Draw, Move,SetAPen;
FROM GraphicsD    IMPORT DrawModes, DrawModeSet, RastPortPtr, jam1;
FROM IntuitionD   IMPORT NewWindow, WindowPtr, IDCMPFlags, IDCMPFlagSet,
                         WindowFlags, WindowFlagSet, ScreenFlags, ScreenFlagSet,
                         IntuiText;
FROM IntuitionL   IMPORT OpenWindow, CloseWindow, PrintIText;

TYPE String = ARRAY[0..59] OF CHAR;

VAR nw		: NewWindow;
    wp 		: WindowPtr;
    rpp		: RastPortPtr;
    str		: String;
    text	: ARRAY[1..8] OF String;
    IntuiTexts1,
    IntuiTexts2 : ARRAY[1..8] OF IntuiText;
    i          	: INTEGER;

BEGIN

  WITH nw DO
    leftEdge := 0; topEdge :=  0; width := 640; height := 256;
    detailPen := 0; blockPen := 1; idcmpFlags :=  IDCMPFlagSet{mouseButtons};
    flags := WindowFlagSet{windowDrag, activate, gimmeZeroZero};
    firstGadget := NIL; checkMark := NIL;
    title := ADR("DrawModeTest       Press button to quit");
    bitMap := NIL ; type := ScreenFlagSet{wbenchScreen};
  END;

  wp := OpenWindow(nw);
  Assert(wp#NIL,ADR("Kein Window"));

  rpp := wp^.rPort;

  str := "Hallo Hallo";
  text[1] := "Dies ist jam1 (=DrawModeSet{}).";
  text[2] := "Dies ist jam2 (=DrawModeSet{dm0}).";
  text[3] := "Dies ist DrawModeSet{inversvid}.";
  text[4] := "Dies ist DrawModeSet{complement}.";
  text[5] := "Dies ist DrawModeSet{dm0,inversvid}.";
  text[6] := "Dies ist DrawModeSet{dm0,complement}.";
  text[7] := "Dies ist DrawModeSet{dm0,inversvid,complement}.";
  text[8] := "Dies ist DrawModeSet{inversvid,complement}.";

  FOR i := 1 TO 8 DO
    IntuiTexts1[i].frontPen := 1;
    IntuiTexts1[i].backPen  := 0;
    IntuiTexts1[i].drawMode := jam1;
    IntuiTexts1[i].leftEdge := 0;
    IntuiTexts1[i].topEdge  := 0;
    IntuiTexts1[i].iText    := ADR(str);
    IntuiTexts1[i].nextText := NIL;
  END;

  FOR i := 1 TO 8 DO
    IntuiTexts2[i].frontPen := 1;
    IntuiTexts2[i].backPen  := 0;
    IntuiTexts2[i].drawMode := jam1;
    IntuiTexts2[i].leftEdge := 0;
    IntuiTexts2[i].topEdge  := 0;
    IntuiTexts2[i].iText    := ADR(text[i]);
    IntuiTexts2[i].nextText := NIL;
  END;

  IntuiTexts1[2].drawMode := DrawModeSet{dm0};
  IntuiTexts1[3].drawMode := DrawModeSet{inversvid};
  IntuiTexts1[4].drawMode := DrawModeSet{complement};
  IntuiTexts1[5].drawMode := DrawModeSet{dm0,inversvid};
  IntuiTexts1[6].drawMode := DrawModeSet{dm0,complement};
  IntuiTexts1[7].drawMode := DrawModeSet{dm0,inversvid,complement};
  IntuiTexts1[8].drawMode := DrawModeSet{inversvid,complement};

  SetAPen(rpp,2);
  FOR i := 1 TO 65 BY 9 DO
    Move(rpp,i,240);
    Draw(rpp,i,0)
  END;

  SetAPen(rpp,3);
  FOR i := 240 TO 1 BY -5 DO
    Move(rpp,0,i);
    Draw(rpp,65,i);
  END;

  FOR i := 1 TO 8 DO
    PrintIText(rpp,ADR(IntuiTexts1[i]),20,20*i);
  END;

  FOR i := 1 TO 8 DO
    PrintIText(rpp,ADR(IntuiTexts2[i]),150,20*i);
  END;

  WaitPort(wp^.userPort);

CLOSE

  IF wp#NIL THEN CloseWindow(wp); END;

END DrawModesTest.
