(*********************************************************************
 *
 *  :Program.		EingabeModul für BESTENLISTE
 *  :Author.		Hans Schafft
 *  :Address.		Landfriedstraße 1A - Hinterhaus
 *  :Address.		6900 Heidelberg
 *  :Phone.		06221 - 22416
 *  :Version.		1.0
 *  :Date.		1988
 *  :Copyright.		PD
 *  :Language.		Modula-II
 *  :Translator.	M2Amiga
 *  :Contents.
 *
 *********************************************************************)
(***************************************************************)
(* Das Modul überschreibt einen String mit der BenutzerEingabe *)
(***************************************************************)
IMPLEMENTATION MODULE BenutzerEingabe;

FROM Arts	IMPORT	Assert;
FROM SYSTEM	IMPORT	ADDRESS, LONGSET, ADR;
FROM Graphics	IMPORT	jam2, jam1, SetAPen, RectFill,ScrollRaster,
			ClipBlit,WaitTOF;
FROM Str 	IMPORT	Concat,Copy;
FROM Exec      	IMPORT  WaitPort,ReplyMsg,GetMsg;
FROM Intuition	IMPORT	strGadget,ActivationFlagSet,Border,Gadget,AddGadget,
			GadgetPtr,IntuiMessagePtr, IDCMPFlags, IDCMPFlagSet,
			GadgetFlagSet,IntuiText,RemoveGadget,ActivateGadget,
			ActivationFlags, WindowPtr,RefreshGadgets,StringInfo;

(***************************************************************)
PROCEDURE Eingabe(wiPtr : WindowPtr; VAR name : ARRAY OF CHAR);

CONST
 GadBreite  =  160;
 GadHoehe   =  12;
 XPos = 130;
 YPos = 490;

VAR
 NameGad	: Gadget;
 NameGadBorder	: Border;
 NameGadPairs	: ARRAY [1..10] OF INTEGER;
 NameStrInfo	: StringInfo;
 itext		: IntuiText;
 ok		: BOOLEAN;
 buffer		: ARRAY [0..21] OF CHAR;
 bufPtr		: ADDRESS;
 pos		: INTEGER;
 hilfen,y	: INTEGER;
 versuche,x	: INTEGER;
 msgPtr		: IntuiMessagePtr;
 class		: IDCMPFlagSet;
 gadPtr		: GadgetPtr;

BEGIN
  FOR pos := 0 TO 21 DO
    buffer[pos] := 0C;
  END;
  bufPtr := ADR(buffer[0]);

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

  WITH itext DO
    leftEdge  := 0;			topEdge := -12;
    frontPen  := 1;			backPen := 0;
    drawMode  := jam1;			nextText := NIL;
    iTextFont := NIL;
    iText     := ADR("BITTE NAME EINGEBEN");
  END;

  WITH NameGadBorder DO
    leftEdge := -1; 			topEdge    := -1;
    frontPen := 3; 			backPen    := 2;
    drawMode := jam2; 			count 	   := 5;
    xy 	     := ADR(NameGadPairs); 	nextBorder := NIL;
  END;

  WITH NameStrInfo DO
    buffer 	:= bufPtr;
    undoBuffer 	:= NIL;
    bufferPos 	:= 0;
    maxChars 	:= 20;
    dispPos 	:= 0;
    undoPos 	:= 0;
    numChars 	:= 20;
    dispCount 	:= 0;
    cLeft 	:= 0;
    cTop 	:= 0;
    layerPtr 	:= NIL;
    longInt 	:= 0;
    altKeyMap 	:= NIL;
  END;

  WITH NameGad DO
    leftEdge  	  :=  XPos;
    topEdge  	  :=  YPos;
    width  	  :=  GadBreite;
    height	  :=  GadHoehe;
    flags  	  :=  GadgetFlagSet{};
    activation 	  :=  ActivationFlagSet{relVerify};
    gadgetType 	  :=  strGadget;
    gadgetRender  :=  ADR(NameGadBorder);
    gadgetText 	  :=  ADR(itext);
    mutualExclude :=  LONGSET{};
    nextGadget 	  :=  NIL;
    selectRender  :=  NIL;
    specialInfo   :=  ADR(NameStrInfo);
    userData      :=  NIL;
    gadgetID 	  :=  200;
  END;

  pos := AddGadget(wiPtr,ADR(NameGad),0);
  RefreshGadgets(ADR(NameGad),wiPtr,NIL);
  ok := ActivateGadget(ADR(NameGad),wiPtr,NIL);
  Assert(ok,ADR("Gadget konnte nicht aktiviert werden"));

  REPEAT
    WaitPort(wiPtr^.userPort);
    LOOP
      msgPtr := GetMsg(wiPtr^.userPort);
      IF msgPtr = NIL THEN EXIT END;

      class := msgPtr^.class;
      gadPtr:= msgPtr^.iAddress;

      ReplyMsg(msgPtr);

      IF (gadPtr^.gadgetID = 200) THEN
        ok := TRUE;
        EXIT;
      ELSE
        ok := FALSE;
      END;

    END; (* LOOP *)
  UNTIL ok;

  pos := RemoveGadget(wiPtr,ADR(NameGad));

  FOR x := 30 TO 190 DO
    ClipBlit(wiPtr^.rPort,XPos-2,YPos-14,wiPtr^.rPort,
  		XPos-(x DIV 2),YPos-14-x,GadBreite+4,GadHoehe+16,0C0H);
  END;

  Concat(buffer,0C);
  Copy(name,buffer);

END  Eingabe;

(***************************************************************)
(***************************************************************)
BEGIN
END BenutzerEingabe.
