{$if not def AP_SUCHEN_H}

CONST
   AP_SUCHEN_H = 0;
 
VAR     gefunden:BOOLEAN;STATIC;
    weitersuchen:BOOLEAN;STATIC;
     merk,lauf : p_person;STATIC;

PROCEDURE deakt13;
 BEGIN
  t[1] := TagItem(GT_UNDERSCORE,LONG('_'));
  t[2] := TagItem(GTCB_SCALED,1);
  t[3] := TagItem(GTCB_CHECKED,0);
  t[4].ti_Tag := TAG_DONE;
  GT_SetGadgetAttrsA(sgad[13],wp2,NIL,^t);  
 END;

PROCEDURE allesakt;
 BEGIN
  t[1] := TagItem(GT_UNDERSCORE,LONG('_'));
  t[2] := TagItem(GTCB_SCALED,1);
  t[3] := TagItem(GTCB_CHECKED,1);
  t[4].ti_Tag := TAG_DONE;
  IF (sgad[13]^.flags AND SELECTED) <> SELECTED THEN t[3].ti_data:=0;
  FOR i:=2 TO 12 DO GT_SetGadgetAttrsA(sgad[i],wp2,NIL,^t);    
 END;

PROCEDURE startesuche;
VAR  vergleich : STRING; 
      ge,ig,an : BOOLEAN;
            er : BOOLEAN;  { Aus Verlegenheit *-=8-) er=erster}

PROCEDURE ps1;
 BEGIN
  IF an THEN                                                    { von Anfang}
  BEGIN 
   aktuelleperson:=p_person(plist^.lh_head)         
   er:=TRUE;
  END
  ELSE aktuelleperson:=merk;
 END;

PROCEDURE ps2
 BEGIN
  IF ig THEN FOR i:=1 TO length(vergleich) DO vergleich[i]:=upcase(vergleich[i]);
  IF ge THEN BEGIN 
   IF (suchbuf=vergleich) THEN gefunden:=TRUE
  END
   ELSE IF Pos(suchbuf,vergleich)<>0 THEN gefunden:=TRUE;
 END;

 PROCEDURE suchname;
  BEGIN
  ps1;                                         {v-- = letzter Knoten vor NIL}  
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tailpred^.ln_succ)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.name
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
{-- andere Suchprozeduren ---}
 PROCEDURE suchvorname;
  BEGIN       
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.vorname;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson;  
  END;
  
 PROCEDURE suchstrasse;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.strasse;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchplz;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.plz;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchort;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.ort;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchtelefon;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.tel;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchgeburtstag;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.geb;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchfax;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.fax;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchemail1;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.email1
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchemail2;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.email2;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
  
 PROCEDURE suchkommentar;
  BEGIN
   ps1;
   WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO
    BEGIN
     IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ)
               ELSE er:=FALSE;
     vergleich:=aktuelleperson^.kommentar;
     ps2;
    END; {OF WHILE }
   IF gefunden THEN lauf:=aktuelleperson; 
  END;
 

 BEGIN
  lauf:=aktuelleperson;
  gefunden:=FALSE;
  weitersuchen:=FALSE;
  si:=sgad[1]^.specialinfo;
  suchbuf:=si^.buffer;
  setwindowtitles(wp2,'Suche Datensatz ...',PTR(-1));    
  
  IF (sgad[15]^.flags AND selected) = SELECTED THEN ge:=TRUE
                                               ELSE ge:=FALSE;
  IF (sgad[16]^.flags AND selected) = SELECTED THEN ig:=TRUE
                                               ELSE ig:=FALSE;
  IF (sgad[17]^.flags AND selected) = SELECTED THEN an:=TRUE
                                               ELSE an:=FALSE;
  merk:=aktuelleperson;  
  IF ig THEN FOR i:=1 TO length(suchbuf) DO suchbuf[i]:=upcase(suchbuf[i]);
                                                               { groß klein ignore?}
  IF (sgad[2]^.flags AND selected) = SELECTED THEN suchname;
  IF ((sgad[3]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchvorname;
  IF ((sgad[4]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchstrasse;
  IF ((sgad[5]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchplz;
  IF ((sgad[6]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchort;
  IF ((sgad[7]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchtelefon;
  IF ((sgad[8]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchgeburtstag;
  IF ((sgad[9]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchfax;
  IF ((sgad[10]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchemail1;
  IF ((sgad[11]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchemail2;
  IF ((sgad[12]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchkommentar;        
  
  IF gefunden THEN setwindowtitles(wp2,'Datensatz gefunden!',PTR(-1))
              ELSE BEGIN
                    aktuelleperson:=merk;
                    setwindowtitles(wp2,'Kein Datensatz gefunden!',PTR(-1));
                   END;
 END; 
   
PROCEDURE Suchen;
{ -- Such-Prozedur -- }
 BEGIN
  SuchenOberfläche;
  t[1] := TagItem(WA_Innerwidth,ww);
  t[2] := TagItem(WA_Innerheight,wh);
  t[3] := Tagitem(WA_Top,suchwintop);
  t[4] := TagItem(WA_Left,suchwinleft);
  t[5].ti_Tag := WA_Title;
  t[5].ti_Data := "AddiPro - Suchen";
  t[6] := TagItem(WA_Idcmp,IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_RAWKEY);
  t[7] := TagItem(WA_Flags,WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE+WFLG_DEPTHGADGET+
                  WFLG_RMBTRAP+WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH);
  t[8].ti_Tag := TAG_DONE;
  IF pubname <> "" THEN
  BEGIN
    t[8] := TagItem(WA_PubScreenFallBack, 1);
    t[9] := TagItem(WA_PubScreenName, LONG(pubname));
    t[10].ti_Tag := TAG_DONE;
  END;

  wp2 := OpenWindowTagList(NIL,^t);
  IF wp2=NIL THEN exit;
   raster(wp2,0,1,322,148{-1});
   clearq(wp2,6,4,311,127);
   Rahmen(wp2,6,4,312,128,TRUE);
   l:=addgList(wp2,gl2,0,-1,NIL);
   refreshglist(wp2^.firstgadget,wp2,NIL,-1);
   GT_Refreshwindow(wp2,NIL);
   dummy:=FALSE;
   REPEAT
   GetMessage(wp2,class,code,qual,gadnum);
     CASE Class OF

    IDCMP_CLOSEWINDOW: dummy:=TRUE;
  
    IDCMP_RAWKEY:
     IF qual in [32768,32769,32770,32772] THEN
      BEGIN
       CASE code OF
        53,69:BEGIN {B, ESC}  
               Butselecter(wp2,sgad[20]);
               dummy:=TRUE;
              END;    
        33 : BEGIN {S}
              ok:=ActivateGadget(sgad[1],wp2,NIL);
             END;
        54 : BEGIN {N}
              deakt13;
              checkit(wp2,sgad[2]);
             END;
        52 : BEGIN {V}
              deakt13;
              checkit(wp2,sgad[3]);
             END;
        11 : BEGIN {ß}
              deakt13;
              checkit(wp2,sgad[4]);
             END;
        25 : BEGIN {P}
              deakt13;
              checkit(wp2,sgad[5]);
             END;
        24 : BEGIN {O}
              deakt13;
              checkit(wp2,sgad[6]);
             END;
        20 : BEGIN {T}
              deakt13;
              checkit(wp2,sgad[7]);
             END;
        18 : BEGIN {E}
              deakt13;
              checkit(wp2,sgad[8]);
             END;
        35 : BEGIN {F}
              deakt13;
              checkit(wp2,sgad[9]);
             END;
        1 : BEGIN {1}
              deakt13;
              checkit(wp2,sgad[10]);
             END;
        2 : BEGIN {2}
              deakt13;
              checkit(wp2,sgad[11]);
             END;
        55 : BEGIN {M}
              deakt13;
              checkit(wp2,sgad[12]);
             END;
        32 : BEGIN {A}
              checkit(wp2,sgad[13])
              allesakt;
             END;
{        39 : BEGIN {K}
              Butselecter(wp2,sgad[14]);
              allesdeakt;
             END;}
        36 : BEGIN {G}
              checkit(wp2,sgad[15]);
             END;
        23 : BEGIN {I}
              checkit(wp2,sgad[16]);
             END;
        57 : BEGIN {.}
              checkit(wp2,sgad[17]);
             END;
        21 : BEGIN {Z}
              Butselecter(wp2,sgad[18]);
              blättern(aktuelleperson);
              ComputeFont(322,149);
             END;
        22 : BEGIN {U}
              Butselecter(wp2,sgad[19]);
              startesuche;
             END;    
        ELSE END;
      END;

     IDCMP_GadgetUP:
        CASE gadnum OF
          2..12: deakt13;
          13:allesakt;
          18:BEGIN
              blättern(aktuelleperson);
              Computefont(322,149);
             END;
          19:startesuche;
          20:dummy:=TRUE ;
        ELSE END;      
      ELSE END;
  
  UNTIL dummy;
  suchwintop:=wp2^.topedge;
  suchwinleft:=wp2^.leftedge;
  si:=sgad[1]^.specialinfo;
  suchbuf:=si^.buffer;
  err:=removegList(wp2,wp2^.firstgadget,-1);
  Fenster_zu(wp2);
  Freegadgets(gl2);  
  ComputeFont(MainWinWidth,MainWinHeight);
 END;

  
{$endif} 
