(*********************************************************************
 *
 *  :Program.		Abfrage ob Drucker angeschlossen gibt BOOLEAN zurück
 *  :Author.		Hans Schafft
 *  :Address.		Landfriedstraße 1A - Hinterhaus
 *  :Address.		6900 Heidelberg
 *  :Phone.		06221 - 22416
 *  :Version.		1.0
 *  :Date.		1989
 *  :Copyright.		PD
 *  :Language.		Modula-II
 *  :Translator.	M2Amiga
 *
 *********************************************************************)

IMPLEMENTATION MODULE WARNUNG;

FROM SYSTEM	IMPORT  ADR, ADDRESS, LONGSET;
FROM Intuition	IMPORT	GadgetPtr, WindowPtr,IntuiText,RemoveGadget,
			IntuiMessagePtr, IDCMPFlags, IDCMPFlagSet,
			boolGadget, reqGadget, ActivationFlags,Request,
		        ActivationFlagSet, Border, Gadget, GadgetFlagSet,
                        Requester, RequesterFlagSet, InitRequester;
FROM Exec       IMPORT  MemReqs, MemReqSet, WaitPort, ReplyMsg, GetMsg;
FROM Graphics	IMPORT	jam2, jam1;


CONST
 RequBreite = 320; 	RequHoehe = 60;
 GadBreite  = 115; 	GadHoehe  =  10;

VAR
 WarnRequest   : Requester;
 WarnGad1Text  : IntuiText;
 WarnGad1      : Gadget;
 WarnGad1Border: Border;
 WarnGad1Ecken : ARRAY [1..10] OF INTEGER;
 WarnGad2Text  : IntuiText;
 WarnGad2      : Gadget;
 WarnGad2Border: Border;
 WarnGad2Ecken : ARRAY [1..10] OF INTEGER;
 WarnReqBorder : Border;
 WarnReqEcken  : ARRAY [1..10] OF INTEGER;
 WarnReqText   : ARRAY [0..1] OF IntuiText;


(******************************************************************)
PROCEDURE DruckerAn(wiPtr : WindowPtr) : BOOLEAN;
VAR
  gadPtr	: GadgetPtr;
  gadNr,z	: INTEGER;
  hilfen,y	: INTEGER;
  versuche,x	: INTEGER;
  msgPtr	: IntuiMessagePtr;
  class 	: IDCMPFlagSet;
  code		: CARDINAL;
  ende,mode	: BOOLEAN;

BEGIN
  IF Request(ADR(WarnRequest),wiPtr) THEN
    ende := FALSE;mode := TRUE;
    REPEAT
      WaitPort(wiPtr^.userPort);
      LOOP
        msgPtr := GetMsg(wiPtr^.userPort);
        IF msgPtr=NIL THEN EXIT END;

        class := msgPtr^.class;
        code  := msgPtr^.code;
        gadPtr := msgPtr^.iAddress;
        gadNr := gadPtr^.gadgetID;

        ReplyMsg(msgPtr);

        IF (class = IDCMPFlagSet{gadgetUp}) THEN
          CASE gadNr OF
          | 1 : mode := TRUE;  ende := TRUE;
          | 2 : mode := FALSE; ende := TRUE;
          ELSE
          END;
        END;
        IF ende THEN EXIT END;
      END; (* LOOP *)
    UNTIL ende;
  END;
  RETURN mode;
END DruckerAn;


(******************************************************************)
PROCEDURE RichteEinGadgetJa;
BEGIN
   (* Koordinaten für den Rand der Gadget Box *)
  WarnGad1Ecken[1] := 0;              WarnGad1Ecken[2] := 0;
  WarnGad1Ecken[3] := GadBreite+1;    WarnGad1Ecken[4] := 0;
  WarnGad1Ecken[5] := GadBreite+1;    WarnGad1Ecken[6] := GadHoehe+1;
  WarnGad1Ecken[7] := 0;              WarnGad1Ecken[8] := GadHoehe+1;
  WarnGad1Ecken[9] := 0;              WarnGad1Ecken[10] := 0;

  WITH WarnGad1Border DO
    leftEdge := -1; 			topEdge 	:= -1;
    frontPen := 4; 			backPen 	:= 0;
    drawMode := jam1; 	     		count   	:= 5;
    xy       := ADR(WarnGad1Ecken); 	nextBorder 	:= NIL;
  END;

  WITH WarnGad1Text DO
   leftEdge  := 3; topEdge := 1;
   frontPen  := 12; backPen := 2;
   drawMode  := jam2;
   iText     := ADR("NA KLAR DOCH!");
   iTextFont := NIL; nextText := NIL;
  END;

  WITH WarnGad1 DO
   leftEdge  	:=  190;
   topEdge  	:=  RequHoehe - (GadHoehe + 13);
   width  	:=  GadBreite;
   height 	:=  GadHoehe;
   flags  	:=  GadgetFlagSet{};
   activation 	:=  ActivationFlagSet{endGadget, relVerify};
   gadgetType 	:=  boolGadget + reqGadget;
   gadgetRender :=  ADR(WarnGad1Border);
   gadgetText 	:=  ADR(WarnGad1Text);
   mutualExclude:=  LONGSET{};
   nextGadget 	:=  NIL;
   selectRender :=  NIL;
   specialInfo 	:=  NIL;
   userData     :=  NIL;
   gadgetID	:=  1;
  END;
 END RichteEinGadgetJa;


(******************************************************************)
PROCEDURE RichteEinGadgetNein;
BEGIN
   (* Koordinaten für den Rand der Gadget Box *)
  WarnGad2Ecken[1] := 0;              WarnGad2Ecken[2] := 0;
  WarnGad2Ecken[3] := GadBreite+4;    WarnGad2Ecken[4] := 0;
  WarnGad2Ecken[5] := GadBreite+4;    WarnGad2Ecken[6] := GadHoehe+1;
  WarnGad2Ecken[7] := 0;              WarnGad2Ecken[8] := GadHoehe+1;
  WarnGad2Ecken[9] := 0;              WarnGad2Ecken[10] := 0;

  WITH WarnGad2Border DO
    leftEdge := -1;   			topEdge := -1;
    frontPen := 4;			backPen :=  0;
    drawMode := jam2; 			count   :=  5;
    xy 	     := ADR(WarnGad2Ecken);
    nextBorder  :=  NIL;(*ADR(WarnGad1Border);*)
  END;

  WITH WarnGad2Text DO
    leftEdge  := 5; topEdge := 1;
    frontPen  := 12; backPen := 2;
    drawMode  := jam2;
    iText     := ADR("ACH MIST,NEE!");
    iTextFont := NIL; nextText := NIL;
  END;

  WITH WarnGad2 DO
    leftEdge  	:=  10;
    topEdge  	:=  RequHoehe - (GadHoehe + 13);
    width  	:=  GadBreite;
    height	:=  GadHoehe;
    flags  	:=  GadgetFlagSet{};
   activation 	:=  ActivationFlagSet{endGadget, relVerify};
   gadgetType 	:=  boolGadget + reqGadget;
   gadgetRender :=  ADR(WarnGad2Border);
   gadgetText 	:=  ADR(WarnGad2Text);
   mutualExclude:=  LONGSET{};
   nextGadget 	:=  ADR(WarnGad1);
   selectRender :=  NIL;
   specialInfo 	:=  NIL;
   userData 	:=  NIL;
   gadgetID 	:=  2
  END;
 END RichteEinGadgetNein;


(******************************************************************)
PROCEDURE RichteEinRequester;
BEGIN
  WarnReqEcken[1] := 0;              WarnReqEcken[2] := 0;
  WarnReqEcken[3] := RequBreite-3;   WarnReqEcken[4] := 0;
  WarnReqEcken[5] := RequBreite-3;   WarnReqEcken[6] := RequHoehe-3;
  WarnReqEcken[7] := 0;              WarnReqEcken[8] := RequHoehe-3;
  WarnReqEcken[9] := 0;              WarnReqEcken[10] := 0;

  WITH WarnReqBorder DO
    leftEdge := 1;  topEdge := 1;
    frontPen := 3;  backPen := 0;
    drawMode := jam2; count := 5;
    xy       := ADR(WarnReqEcken); nextBorder := NIL;
  END;

  InitRequester(ADR(WarnRequest));

  WITH WarnRequest DO
    leftEdge 	:= 30;
    topEdge	:= 210;
    width 	:= RequBreite;
    height	:= RequHoehe;
    reqGadget 	:= ADR(WarnGad2);
    reqText 	:= ADR(WarnReqText);
    reqBorder 	:= ADR(WarnReqBorder);
    backFill 	:= 2;
  END;

 END RichteEinRequester;


(******************************************************************)
PROCEDURE RichteEinRequesterText;

 PROCEDURE InitIText(VAR itext: IntuiText; L, T: CARDINAL; Next, text: ADDRESS);
  BEGIN
   WITH itext DO
    leftEdge  := L+15; topEdge  := T;
    frontPen  := 12;   backPen  := 2;
    drawMode  := jam2; iText    := text;
    iTextFont := NIL;  nextText := Next
   END
  END InitIText;

BEGIN
  InitIText(WarnReqText[0], 5, 10, ADR(WarnReqText[1]),
        ADR("IST DENN AUCH WIRKLICH EIN DRUCKER"));
  InitIText(WarnReqText[1], 5, 20, NIL,
        ADR("ANGESCHLOSSEN UND EINGESCHALTET ??"));
END RichteEinRequesterText;


(******************************************************************)
(******************************************************************)
BEGIN
 RichteEinGadgetJa; RichteEinGadgetNein;
 RichteEinRequesterText; RichteEinRequester;
END WARNUNG.
