PROGRAM Alertdemo;

{$path 'ram:include','pascal:include/';incl 'intuition.lib' }

TYPE
  maxtext = STRING[255];
  kurztext = STRING[33];

VAR
  nummer: INTEGER;

FUNCTION alert(x,y:INTEGER;boxtext:maxtext;defbutton:INTEGER;buttontext:kurztext):INTEGER;


TYPE
  ImgDatTyp = ARRAY[1..72] OF LONG;  { Typ für Borderdata }

VAR
  Win                                           : ^Window;
  Msg                                           : ^IntuiMessage;
  Gad1, Gad2, Gad3                              : Gadget;
  Tex1, Tex2, Tex3                              : IntuiText;
  img1,img2                                     : image;
  idt1,idt2                                     : ^imgdattyp;
  AktGad                                        : ^Gadget;
  stelle,len,i,j,zeile,button,maxlenz,maxlenb   : INTEGER;
  btext,butext                                  : ARRAY [1..5] OF STRING;
  dummy                                         : maxtext;
  ende                                          : boolean;
  maxh,maxb,g2pos,g3pos,dmode1,dmode2,dmode3    : INTEGER;
  return                                        : char;
  con                                           : ptr;
  sig                                           : long;


PROCEDURE writeW(t: Str;xpos,ypos:INTEGER);
  { gibt den Text "t" im Window aus }
  Var it: IntuiText;
  BEGIN
   it:=IntuiText(1,0,1,0,0,Nil,t,Nil);
   PrintIText(Win^.RPort, ^it, xpos, ypos);
  END;

BEGIN
  {Auswertung der Eingaben}
  zeile:=0;
  len:=STRLEN(boxtext);
  dummy:='';
  FOR i:=1 TO 5 DO
  BEGIN
    stelle:=POS('|',boxtext);
    IF (stelle<>0) OR (len>0) THEN
    BEGIN
      IF stelle=0 THEN stelle:=len+1;
      btext[i]:=COPY(boxtext,1,(stelle-1));
      dummy:=boxtext;
      boxtext:=COPY(dummy,(stelle+1),(len-stelle));
      len:=STRLEN(boxtext);
      zeile:=zeile+1;
      dummy:=btext[i];
      btext[i]:=COPY(dummy,1,40);
    END;
  END;
  button:=0;
  len:=STRLEN(buttontext);
  dummy:='';
  FOR i:=1 TO 3 DO
  BEGIN
    stelle:=POS('|',buttontext);
    IF (stelle<>0) OR (len>0) THEN
    BEGIN
      IF stelle=0 THEN stelle:=len+1;
      butext[i]:=COPY(buttontext,1,(stelle-1));
      dummy:=buttontext;
      buttontext:=COPY(dummy,(stelle+1),(len-stelle));
      len:=STRLEN(buttontext);
      button:=button+1;
      dummy:=butext[i];
      butext[i]:=COPY(dummy,1,40);
    END;
  END;
  IF defbutton>button THEN defbutton:=1;

  {Bestimmung der Größe des Windows und der Gadgetpositionen}

  maxlenz:=button*12;
  FOR i:=1 TO zeile DO
    IF maxlenz<STRLEN(btext[i]) THEN maxlenz:=STRLEN(btext[i]);
  maxh:=(40+zeile*10);
  maxb:=(maxlenz*10);
  IF button=2 THEN g2pos:=maxb-106;
  IF button=3 THEN
  BEGIN
    g3pos:=maxb-106;
    g2pos:=TRUNC(maxb/2-48);
  END;
  { Defbutton bestimmen }
  dmode1:=0;
  dmode2:=0;
  dmode3:=0;
  CASE defbutton OF
    1: dmode1:=2;
    2: dmode2:=2;
    3: dmode3:=2;
  END;
{ ALERT - Window öffnen }
  IF NOT((button=0) OR (zeile=0)) THEN
  BEGIN
    OpenLib(IntBase, 'intuition.library', 0);
    Win:=Open_Window(x, y, maxb ,maxh , 1,GADGETUP+GADGETDOWN,
         WINDOWDEPTH+ACTIVATE,
         'MELDUNG', Nil, 300, 100, 640, 256);
    Con:=openconsole(win);
    WriteCon(Con,''\e'0 p'); { Cursor Unsichtbar }
    Gad1:=Gadget(Nil,           { erste Gadget-Struktur: }
                 10,maxh-15,    { Position }
                 96,12,         { Größe }
                 GADGHIMAGE+GADGIMAGE,     { Gadget ist ein Image }
                 RELVERIFY, { Activation Flags }
                 BOOLGADGET,    { Typ }
                 ^Img1,         { Zeiger auf Imagestruktur }
                 ^Img2,         { Zeiger auf ImagestrDuktur }
                 ^Tex1,         { Zeiger auf Text }
                 0, Nil, 1, 0); { Nummer 1 }
    Tex1:=IntuiText(1, 0, dmode1,(48-TRUNC(STRLEN(butext[1])/2*8)),3, Nil, butext[1], Nil);
    Gad2:=Gadget(Nil,           { zweite Gadget-Struktur: }
                 g2pos,maxh-15, { Position }
                 96,12,         { Größe }
                 GADGHIMAGE+GADGIMAGE,      { Gadget ist ein Image }
                 RELVERIFY,     { Activation Flags }
                 BOOLGADGET,    { Typ }
                 ^Img1,         { Zeiger auf Borderstruktur }
                 ^Img2,           { kein Select-Border }
                 ^Tex2,         { Zeiger auf Text }
                 0, Nil, 2, 0); { Nummer 2 }
    Tex2:=IntuiText(1, 0, dmode2, (48-TRUNC(STRLEN(butext[2])/2*8)), 3, Nil, butext[2], Nil);
    Gad3:=Gadget(Nil,           { dritte Gadget-Struktur: }
                 g3pos,maxh-15, { Position }
                 96,12,         { Größe }
                 GADGHIMAGE+GADGIMAGE,    { Gadget hat Bild }
                 RELVERIFY,     { Activation Flags }
                 BOOLGADGET,    { Typ }
                 ^Img1,         { Zeiger auf Imagestruktur }
                 ^Img2,         { Select-Image }
                 ^Tex3,         { Zeiger auf Text }
                 0, Nil, 3, 0); { Nummer 3 }
    Tex3:=IntuiText(1, 0, dmode3, (48-TRUNC(STRLEN(butext[3])/2*8)), 3, Nil, butext[3], Nil);
    IDt1:=Ptr(Alloc_Mem(SizeOf(ImgDatTyp),2));
    IDt1^:=ImgDatTyp($ffffffff,$ffffffff,$ffffffff, {erstes Image 0.Bitplane}
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $80000000,$00000000,$00000000,

                     $00000000,$00000000,$00000000, {erstes Image 1.Bitplane}
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff);
    IDt2:=Ptr(Alloc_Mem(SizeOf(ImgDatTyp),2));
    IDt2^:=ImgDatTyp($00000000,$00000000,$00000000, {zweites Image 0.Bitplane}
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,
                     $7fffffff,$ffffffff,$ffffffff,

                     $ffffffff,$ffffffff,$ffffffff, {zweites Image 1.Bitplane}
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $ffffffff,$ffffffff,$fffffffe,
                     $80000000,$00000000,$00000000);
    Img1:=Image(0,0,96,12,2,IDt1,3,3,Nil);
    Img2:=Image(0,0,96,12,2,IDt2,3,3,Nil);
    AddGadget(Win, ^Gad1, Nil);
    IF button= 2 THEN AddGadget(Win, ^Gad2, Nil)
    else
    BEGIN
      IF button=3 THEN
      BEGIN
        AddGadget(Win, ^Gad3, Nil);
        AddGadget(Win, ^Gad2, Nil);
      END;
    END;
    RefreshGadgets(Win^.FirstGadget, Win, Nil);
{ Texte in das ALERT-Window schreiben }
    FOR i:=1 TO zeile DO
    BEGIN
      writeW(btext[i],10,(i*12+3));
    END;
    Ende:=False;
    REPEAT
      Msg:=Get_Msg(Win^.UserPort);
      WHILE Msg<>Nil DO
      BEGIN
        IF Msg^.Class IN [GADGETUP,GADGETDOWN] THEN
          BEGIN
            AktGad:=Msg^.IAddress;
            CASE AktGad^.GadgetID OF
              1: BEGIN
                   alert:=1;
                   ende:=true;
                 END;
              2: BEGIN
                   alert:=2;
                   ende:=true;
                 END;
              3: BEGIN
                   alert:=3;
                   ende:=true;
                 END;
              Otherwise;
            End  { of CASE }
          END;
        Reply_Msg(Msg);
        Msg:=Get_Msg(Win^.UserPort);
      END;
      return:=readcon(Con);
      IF ord(return) = 13 THEN
      BEGIN
        alert:=defbutton;
        ende:=true;
      END;
      IF NOT ende THEN sig:=wait(-1); { Warten auf Nachricht!   }
                                      { Keine Endlos Schleife!! }

    UNTIL Ende;
    Close_Window(Win);
    CloseLib(IntBase);
    Free_Mem(Long(IDt1),SizeOf(ImgDatTyp));
    Free_Mem(Long(IDt2),SizeOf(ImgDatTyp));
  END;
END;
{ Hauptprogramm }
BEGIN
  nummer:=alert(30,50,'Erste Zeile!|Zweite Zeile!|Dritte Zeile!|Vierte Zeile!|Fünfte Zeile!',2,'1. Knopf|2. Knopf|3. Knopf');
  write(nummer);
END.










