{$if not def AP_DRUCKMENÜ_H}

 CONST
  AP_DRUCKMENÜ_H = 0;

{$ incl 'tooltype.h'}
  
 PROCEDURE kommentare(gad:p_gadget;zustand:INTEGER);
 {$ incl 'kommentare.h'}
  BEGIN
   CASE cyclezustand(fordruck,gad,zustand) OF
    0:k0;
    1:k1;
    2:k2;
    3:k3;
    4:k4;
    5:k5;
    6:k6;
    7:k7;
   ELSE END;
  END; 
  
 FUNCTION dateivorhanden(s:STRING):BOOLEAN;{string256}
  { prüft nach, ob eine Datei vorhanden ist }
   VAR fi:TEXT;
  BEGIN
   reset(fi,s);
   IF (IORESULT=0) THEN 
    BEGIN
     dateivorhanden:=TRUE;
     close(fi);   
    END
   ELSE dateivorhanden:=FALSE;               
  END;    

{*******************************************************}
TYPE labels=ARRAY[0..12] OF STR;
  VAR Absender,absend,Briefname,pata,pats:STRING200;STATIC;
      absendfor,absendser:STRING200;STATIC; { Absenderstrings }
      Cyclelabels:labels;STATIC;
      i1,iok,zustand7:Integer;STATIC;

    out :text;STATIC;
    dgads : ARRAY[1..10] OF p_Gadget;STATIC;  { das Array mit den gadgets }
   temp : STRING[256];STATIC;
       anf,zeilenlaenge:INTEGER;
       codestring:STRING[4];
{*}        merker:STRING;  { zum merken }         

{********************************************************}
 
FUNCTION druckerok:BOOLEAN;       { Thanks to Diesel ! }
  CONST
   PRA = $BFD000;  { * Basis-Addresse CIA-B * }

   TYPE BytePtr = ^Byte;

   VAR  CIA_Byte : BytePtr;
        CIA_Data : Byte;
        druckername:STRING[6];
 
 BEGIN
  druckername:=druckerausgabe;
  FOR i:= 1 TO 5 DO druckername[i]:=upcase(druckername[i]);
  IF (druckername='PRT:') OR (druckername='PAR:') THEN
  BEGIN
   CIA_Byte := ptr(PRA);
   CIA_Data := ( CIA_Byte^ ) MOD 4 ;
   druckerok:=FALSE;
   CASE CIA_Data of
    3 : umeld("Der Drucker ist entweder aus oder offline und hat kein Papier mehr.");
    1 : umeld("Der Drucker ist offline.");
    2 : umeld("Der Drucker hat kein Papier mehr.");
    0 : druckerok:=TRUE;
   END;
 END ELSE druckerok:=TRUE;
 END;

PROCEDURE druckcodebearbeitung;
{ wandelt den ascii code in eine Zahl um der Code kann als /1 /23 /456 vorliegen}
 VAR dcode: BYTE;
     
 BEGIN
  codestring[1]:=s[anf];
  codestring[2]:=chr(0);
  inc(anf);
  val(s[anf],i1,iok);
  IF (iok=0) AND (anf<>zeilenlaenge) THEN
   BEGIN
   codestring[2]:=s[anf];
   codestring[3]:=chr(0);
   inc(anf);
   val(s[anf],i1,iok);
   IF (iok=0) AND (anf<>zeilenlaenge) THEN
    BEGIN
    codestring[3]:=s[anf];
    codestring[4]:=CHR(0);
    inc(anf);
    END;
   END;
  val(codestring,i1,iok);
  write(out,chr(i1));     {code als char drucken}
 END;

PROCEDURE feldfilter;
{ sucht die zu ersetzenden Felder raus und ersetzt sie mit dem aktuellen
  Datensatz }

 BEGIN
  IF pos('<name>',s)=anf THEN BEGIN
   write(out,aktuellePerson^.name); anf:=anf+6; END
  ELSE IF pos('<vorname>',s)=anf THEN BEGIN
   write(out,aktuellePerson^.vorname); anf:=anf+9; END
   ELSE IF pos('<anrede>',s)=anf THEN
    BEGIN
      CASE aktuelleperson^.anrede OF
       1: write(out,'Herr');
       2: write(out,'Frau');
       3: write(out,'Firma')
       ELSE write(out,aktuelleperson^.anrede_s);
       END;
      anf:=anf+8;
     END
    ELSE IF pos('<ansprache>',s)=anf THEN
     BEGIN
      IF anf=2 THEN write(out,'Sehr geehrte')  { Zeilenanfang }
               ELSE write(out,'sehr geehrte'); 
      CASE aktuelleperson^.anrede OF
       1: write(out,'r Herr');
       2: write(out,' Frau');
       3: write(out,' Damen und Herren')
       ELSE write(out,'(r)');
       END;
      anf:=anf+11;
     END
     ELSE IF pos('<strasse>',s)=anf THEN BEGIN
     write(out,aktuellePerson^.strasse); anf:=anf+9; END
      ELSE IF pos('<plz>',s)=anf THEN BEGIN
      write(out,aktuellePerson^.plz); anf:=anf+5; END
       ELSE IF pos('<ort>',s)=anf THEN BEGIN
       write(out,aktuellePerson^.ort); anf:=anf+5; END
        ELSE IF pos('<email1>',s)=anf THEN BEGIN
        write(out,aktuellePerson^.email1); anf:=anf+8; END
         ELSE IF pos('<email2>',s)=anf THEN BEGIN
         write(out,aktuellePerson^.email2); anf:=anf+8; END
          ELSE IF pos('<geburt>',s)=anf THEN BEGIN
          write(out,aktuellePerson^.geb); anf:=anf+8; END
           ELSE IF pos('<telefon>',s)=anf THEN BEGIN
           write(out,aktuellePerson^.tel); anf:=anf+9; END
            ELSE IF pos('<fax>',s)=anf THEN BEGIN
             write(out,aktuellePerson^.fax); anf:=anf+5; END
             ELSE IF pos('<kommentar>',s)=anf THEN BEGIN
              write(out,aktuellePerson^.kommentar) anf:=anf+11; END
               ELSE IF pos('<absender>',s)=anf THEN BEGIN
                write(out,absender); anf:=anf+10; END
                 ELSE BEGIN
                  write(out,'/',s[anf]);
                  inc(anf);
                 END;
 END;

PROCEDURE checkzeile;
{ parsed eine Zeile durch und sucht nach dem Steuerzeichen "/"
  zweigt, falls eine Zahl folgt nach druckcodebearbeitung, sonst
  nach feldfilter ab }

 BEGIN
  IF ((anf+1)=zeilenlaenge) THEN writeln(out,'/') {wenn am ende der Zeile}
  ELSE REPEAT
   IF (s[anf]='/') AND ((anf+1)<>zeilenlaenge) THEN BEGIN
    inc(anf);
    IF s[anf] in ['1','2','3','4','5','6','7','8','9','0']
     THEN druckcodebearbeitung
     ELSE feldfilter;
   END ELSE
     IF (anf<>zeilenlaenge) THEN
     BEGIN
      write(out,s[anf]);
      inc(anf);
     END;
  UNTIL anf>=zeilenlaenge;
  writeln(out);
 END;

PROCEDURE druckschleife;
 BEGIN
  seek(f,0);
  WHILE NOT eof(f) DO
  BEGIN
   readln(f,s);
   anf:=pos('/',s);
   IF anf<>0 THEN
   BEGIN
    write(out,copy(s,1,anf-1));
    zeilenlaenge:=length(s)+1;        { +1 war der K(n)ackpunkt }
    checkzeile;
   END
   ELSE writeln(out,s);
  END;
 END;

PROCEDURE und_los;
 VAR zustand:INTEGER;
 BEGIN
   zustand:=cyclezustand(serdruck,dgads[7],zustand7);
   IF (zustand=0) THEN druckschleife           { aktuelle person drucken }
       ELSE IF zustand=1 THEN
    BEGIN                                      { alle Datensätze drucken }
     dperson:=aktuelleperson;
     aktuelleperson:=p_person(Plist^.lh_head);
     druckschleife;
     WHILE aktuelleperson^.pn.ln_succ^.ln_succ<>NIL DO
      BEGIN
       aktuelleperson:=p_Person(aktuelleperson^.pn.ln_succ);
       druckschleife;
      END;
     aktuelleperson:=dperson;
    END
   ELSE
    BEGIN                                      { Selectionsmenge x drucken }
     dperson:=aktuelleperson;
     aktuelleperson:=p_person(Plist^.lh_head);
     dec(zustand);
     IF aktuelleperson<>NIL THEN IF aktuelleperson^.select[zustand] THEN druckschleife;
     WHILE aktuelleperson^.pn.ln_succ^.ln_succ<>NIL DO
     BEGIN
      aktuelleperson:=p_Person(aktuelleperson^.pn.ln_succ);
      IF aktuelleperson^.select[zustand] THEN druckschleife;
     END;
     aktuelleperson:=dperson;
    END;
  END;

PROCEDURE kurzvorschau;
 VAR ok:LONG;STATIC;
     executestring:STRING[300];STATIC;
     kvreq:Requester;STATIC;
  
 BEGIN
  IF anzahl>0 THEN
  BEGIN
{   Setbusywindow(serdruck,kvreq);}
   merker:=druckerausgabe;   {alte druckerausgabe merken }
   si:=dgads[1]^.specialinfo;
   briefname:=si^.buffer;
   temp:=pfad+briefname;
   IF dateivorhanden(temp) THEN
    IF dateivorhanden(textanzeiger) THEN
    BEGIN
     druckerausgabe:='ram:addipro.temp';
     rewrite(out,druckerausgabe);
     druckerausgabe:=merker
     IF (IORESULT=0) THEN   
     BEGIN      
      reset(f,temp);
      und_los;
      close(f);   
      close(out);   
      executestring:=textanzeiger+' ram:addipro.temp';
      ok:=execute(executestring,0,0);
      ok:=deleteFile('ram:addipro.temp'); {temporäre Datei löschen }
     END
     ELSE 
     BEGIN
      executestring:='ups ! konnte keine temporäre Datei anlegen !'+chr(10)+
                     '         Zu wenig Arbeitsspeicher ?';
      umeld(executestring);
     END; 
    END
    ELSE
    BEGIN 
     executestring:='Konnte Textanzeiger '+textanzeiger+chr(10)+'nicht finden';
     umeld(executestring);
    END
   ELSE 
   BEGIN
     executestring:='Konnte Datei '+temp+' nicht öffnen !';
     umeld(executestring);   
   END;
{   Unbusywindow(serdruck,kvreq);}
  END ELSE Umeld('Noch kein Datensatz eingegeben '); { Sinnlos }
 END; 

PROCEDURE editier;

 VAR ok:LONG;STATIC;
     executestring:STRING[300];STATIC;
     editreq:Requester;STATIC;
  
  BEGIN
   Setbusywindow(serdruck,editreq);
   si:=dgads[1]^.specialinfo;
   briefname:=si^.buffer;
   briefname:=pfad+briefname;
   IF dateivorhanden(editor) THEN
    BEGIN
      executestring:=editor+' '+briefname;
      ok:=execute(executestring,0,0);
    END
    ELSE 
    BEGIN 
     executestring:='Konnte editor '+editor+chr(10)+'nicht finden';
     umeld(executestring);
    END;
   Unbusywindow(serdruck,editreq);
  END;

PROCEDURE druck;
 BEGIN
  IF anzahl>0 THEN
  BEGIN
  IF druckerok THEN
  BEGIN
   si:=dgads[1]^.specialinfo;
   briefname:=si^.buffer;
   temp:=pfad+briefname;
   reset(f,temp);
   IF IORESULT<>0 THEN
    BEGIN
     umeld('Serienbrieffile nicht gefunden');
     exit;
    END;
   buffer(f,10000);
   rewrite(out,druckerausgabe);
   temp:=chr(31);
   write(out,temp);
   und_los;
   close(out);
   close(f);
   END;
  END ELSE umeld('Noch kein Datensatz eingegeben');
 END;

PROCEDURE absenderladenfor;
  BEGIN
   IF filereqpattern('Absender Laden',absend,pfad,pata) THEN
   BEGIN
    temp:=pfad+absend;
    reset(f,temp);
    IF ioresult=0 THEN
    BEGIN
     readln(f,absender);
     t[1]:=TagItem(GTST_String,LONG(^absender)); 
     t[2].ti_tag:=TAG_DONE;
     GT_SetGadgetAttrsA(dgads[4],fordruck,NIL,^t);
     refreshglist(dgads[4],fordruck,NIL,1);
     close(f);
    END; {Else fehler konnte Datei nicht öffnen}
   END;
  END;

PROCEDURE absenderladenser;
  BEGIN
   IF filereqpattern('Absender Laden',absend,pfad,pata) THEN
   BEGIN
    temp:=pfad+absend;
    reset(f,temp);
    IF ioresult=0 THEN
    BEGIN
     readln(f,absender);
     t[1]:=TagItem(GTST_String,LONG(^absender)); 
     t[2].ti_tag:=TAG_DONE;
     GT_SetGadgetAttrsA(dgads[4],serdruck,NIL,^t);
     refreshglist(dgads[4],serdruck,NIL,1);
     close(f);
    END; 
   END;
  END;
         
PROCEDURE absenderspeichern;
  BEGIN    
   IF filereqpattern('Absender Speichern',absend,pfad,pata) THEN
   BEGIN
    si:=dgads[4]^.specialinfo;
    absender:=si^.buffer;
    temp:=pfad+absend;
    IF length(temp)>3 THEN BEGIN
     s:=Copy(temp,length(temp)-4,4);
     IF s<>'.abs' THEN temp:=temp+'.abs';
    END
    ELSE temp:=temp+'.abs';  {.abs anhängen}
    rewrite(f,temp);
    IF ioresult=0 THEN
    BEGIN
     writeln(f,absender);
     close(f);
    END;
   END;
  END;

PROCEDURE höher(wo:p_window;VAR was:p_GADGET;max,min:INTEGER);
 VAR hilf:INTEGER;
 BEGIN
  si:=was^.specialinfo;
  hilf:=si^.longint;
  inc(hilf);
  IF (hilf>max) OR (hilf<min) THEN hilf:=min;
  t[1]:=TagItem(GT_Underscore,LONG('_'));
  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,hilf);
  t[4].ti_tag:=TAG_DONE;
  GT_SetGadgetAttrsA(was,wo,NIL,^t);
  refreshglist(was,wo,NIL,1);
 END;

PROCEDURE tiefer(wo:p_window;VAR was:p_GADGET;max,min:INTEGER);
 VAR hilf:INTEGER;
 BEGIN
  si:=was^.specialinfo;
  hilf:=si^.longint;
  dec(hilf);
  IF (hilf<min) OR (hilf>max) THEN hilf:=max;
  t[1]:=TagItem(GT_Underscore,LONG('_'));
  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,hilf);
  t[4].ti_tag:=TAG_DONE;
  GT_SetGadgetAttrsA(was,wo,NIL,^t);
  refreshglist(was,wo,NIL,1);
 END;


{****************************************************}

PROCEDURE formularmodus;
   VAR Formularname,absender:STRING200;
     zustand25,zustand26,zustand27,zustand28,zustand29:INTEGER;
     cycle25,cycle26,cycle27,cycle28,cycle29:labels;
     int7,int10,int13,int16,int19,int22:INTEGER;
     buffer:STRING;

 PROCEDURE formularladen;
  BEGIN
   si:=dgads[1]^.specialinfo;
   formularname:=si^.buffer;
   IF filereqpattern('Formular wählen',formularname,pfad,pats) THEN
   BEGIN
    t[1]:=TagItem(GTST_String,LONG(^formularname)); 
    t[2].ti_tag:=TAG_DONE;
    GT_SetGadgetAttrsA(dgads[1],fordruck,NIL,^t);
    refreshgadgets(dgads[1],fordruck,NIL);
   END;
  END;

 BEGIN
  dummy:=FALSE;
  Computefont(592,151);
  ww:=computeX(592);
  wh:=computeY(151);
  zustand25:=0;
  zustand26:=0;
  zustand27:=0;
  zustand28:=0;
  zustand29:=0;
  
  IF NOT holettint('RECHTER_RAND',int7)     THEN int7 :=0;   {  rechter Rand   }
  IF NOT holettint('LINKER_RAND',int10)     THEN int10:=80; {   linker Rand   }  
  IF NOT holettint('ANZAHL_KOPIEN',int13)   THEN int13:=1;  {  Anzahl Kopien  }  
  IF NOT holettint('ETIKETTENBREITE',int16) THEN int16:=30; { Etikettenbreite }
  IF NOT holettint('LEERZEILEN',int19)      THEN int19:=0;  {   Leerzeilen    }
  IF NOT holettint('ABSTAND',int22)         THEN int22:=2;  {     Abstand     }
 
  IF holett('FORMULAR_PFAD',buffer) THEN pfad:=buffer
                                    ELSE pfad:='sys:';   { voreingestellter pfad }
  IF holett('ABSENDER_STRING',buffer) THEN absender:=buffer
                                      ELSE absender:='';
  IF holett('ABSENDER_DATEI',buffer) THEN absend:=buffer
                                     ELSE absend:='';  { dateiname des Absenders }
  IF holett('FORMULAR_NAME',buffer) THEN formularname:=buffer
                                    ELSE formularname:='';
  IF holett('PATTERN_FORMULAR',buffer) THEN pats:=buffer
                                       ELSE pats:='#?.for';    
                                      { Pattern für Filerequester im Formularmodus }
  IF holett('PATTERN_ABSENDER',buffer) THEN pata:=buffer
                                       ELSE pata:='#?.abs';
                                      { Pattern für Filerequester des Absenders }
  Gl1:=NIL;
  gl1:=CreateContext(^Gl1);
  t[1]:=TagItem(GT_Underscore,LONG('_'));
  t[2]:=TagItem(GTST_Maxchars,200);             
  t[3]:=TagItem(GTST_String,long(^Formularname));
  t[4].ti_tag:=TAG_DONE;
    
  ng:=NewGadget(116,5,224,15,'F_ormularname',mytattr,
                1,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[1]:=CreateGadgetA(STRING_KIND,gl1,^ng,^t);

  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(341,5,120,15,'L_aden',mytattr,
                2,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[2]:=CreateGadgetA(BUTTON_KIND,dgads[1],^ng,^t);
    
  ng:=NewGadget(462,5,119,15,'Editor _...',mytattr,
                3,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[3]:=CreateGadgetA(BUTTON_KIND,dgads[2],^ng,^t);
  
  t[1]:=TAGITEM(GT_UNDERSCORE,LONG('_'));  
  t[2]:=TagItem(GTST_Maxchars,200);
  t[3]:=TagItem(GTST_String,LONG(^Absender)); 
  t[4].ti_tag:=TAG_DONE;
  
  ng:=NewGadget(116,23,224,15,'Abs_ender',mytattr,
                4,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[4]:=CreateGadgetA(STRING_KIND,dgads[3],^ng,^t);

  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(341,23,120,15,'_Laden',mytattr,
                5,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[5]:=CreateGadgetA(BUTTON_KIND,dgads[4],^ng,^t);
    
  ng:=NewGadget(462,23,120,15,'_Speichern',mytattr,
                6,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[6]:=CreateGadgetA(BUTTON_KIND,dgads[5],^ng,^t);
 
  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,int7);
  t[4]:=tagItem(STRINGA_Justification,GACT_StringCenter);
  t[5].ti_tag:=TAG_DONE;

  ng:=NewGadget(116,41,46,15,'L_inker Rand',mytattr,
                7,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);  
  dgads[7]:=CreateGadgetA(INTEGER_KIND,dgads[6],^ng,^t);

  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(162,41,20,15,'<',mytattr,
                8,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[8]:=CreateGadgetA(BUTTON_KIND,dgads[7],^ng,^t);
  
  ng:=NewGadget(182,41,20,15,'>',mytattr,
                9,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[9]:=CreateGadgetA(BUTTON_KIND,dgads[8],^ng,^t);

  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,int10);
  t[4]:=tagItem(STRINGA_Justification,GACT_StringCenter);
  t[5].ti_tag:=TAG_DONE;
  
  ng:=NewGadget(310,41,46,15,'_Rechter Rand',mytattr,
                10,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[10]:=CreateGadgetA(INTEGER_KIND,dgads[9],^ng,^t);
  
  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(356,41,20,15,'<',mytattr,
                11,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[11]:=CreateGadgetA(BUTTON_KIND,dgads[10],^ng,^t);

  ng:=NewGadget(376,41,20,15,'>',mytattr,
                12,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[12]:=CreateGadgetA(BUTTON_KIND,dgads[11],^ng,^t);
   
 
  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,int13);
  t[4]:=tagItem(STRINGA_Justification,GACT_StringCenter);
  t[5].ti_tag:=TAG_DONE;

  ng:=NewGadget(495,41,46,15,'Ko_pien',mytattr,
                13,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);  
  dgads[13]:=CreateGadgetA(INTEGER_KIND,dgads[12],^ng,^t);


  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(541,41,20,15,'<',mytattr,
                14,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[14]:=CreateGadgetA(BUTTON_KIND,dgads[13],^ng,^t);
  
  ng:=NewGadget(561,41,20,15,'>',mytattr,
                15,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[15]:=CreateGadgetA(BUTTON_KIND,dgads[14],^ng,^t);

  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,int16);
  t[4]:=tagItem(STRINGA_Justification,GACT_StringCenter);
  t[5].ti_tag:=TAG_DONE;
  
  ng:=NewGadget(116,59,46,15,'Eti_kettbreite',mytattr,
                16,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[16]:=CreateGadgetA(INTEGER_KIND,dgads[15],^ng,^t);
  
  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(162,59,20,15,'<',mytattr,
                17,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[17]:=CreateGadgetA(BUTTON_KIND,dgads[16],^ng,^t);

  ng:=NewGadget(182,59,20,15,'>',mytattr,
                18,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[18]:=CreateGadgetA(BUTTON_KIND,dgads[17],^ng,^t);
   
  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,int19);
  t[4]:=tagItem(STRINGA_Justification,GACT_StringCenter);
  t[5].ti_tag:=TAG_DONE;
  
  ng:=NewGadget(310,59,46,15,'Leer_zeilen',mytattr,
                19,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[19]:=CreateGadgetA(INTEGER_KIND,dgads[18],^ng,^t);
  
  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(356,59,20,15,'<',mytattr,
                20,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[20]:=CreateGadgetA(BUTTON_KIND,dgads[19],^ng,^t);

  ng:=NewGadget(376,59,20,15,'>',mytattr,
                21,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[21]:=CreateGadgetA(BUTTON_KIND,dgads[20],^ng,^t);
   
 
  t[2]:=TagItem(GTIN_Maxchars,3);             
  t[3]:=TagItem(GTIN_NUMBER,int22);
  t[4]:=tagItem(STRINGA_Justification,GACT_StringCenter);
  t[5].ti_tag:=TAG_DONE;

  ng:=NewGadget(497,59,44,15,'Abs_tand',mytattr,
                22,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);  
  dgads[22]:=CreateGadgetA(INTEGER_KIND,dgads[21],^ng,^t);


  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(541,59,20,15,'<',mytattr,
                23,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[23]:=CreateGadgetA(BUTTON_KIND,dgads[22],^ng,^t);
  
  ng:=NewGadget(561,59,20,15,'>',mytattr,
                24,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[24]:=CreateGadgetA(BUTTON_KIND,dgads[23],^ng,^t);

  cycle25:=labels('Pica','Elite','Cond','Proportional',
                  NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL);
  t[2]:=TagItem(GTCY_ACTIVE,zustand25);
  t[3]:=TagItem(GTCY_Labels,LONG(^Cycle25)); 
  t[4].ti_tag:=TAG_DONE;

  ng:=NewGadget(116,77,200,15,'Dic_hte',mytattr,
                25,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[25]:=CreateGadgetA(CYCLE_KIND,dgads[24],^ng,^t);


  cycle26:=labels('NLQ','Draft',NIL,
                  NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL);

  t[2]:=TagItem(GTCY_ACTIVE,zustand26);
  t[3]:=TagItem(GTCY_Labels,LONG(^Cycle26)); 
  t[4].ti_tag:=TAG_DONE;

  ng:=NewGadget(445,77,136,15,'S_chriftart',mytattr,
                26,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[26]:=CreateGadgetA(CYCLE_KIND,dgads[25],^ng,^t);

  
  Cycle27:=labels('Aktueller Datensatz',
                     'Alle Datensätze',
                      Selecttexte[1],
                      Selecttexte[2],
                      Selecttexte[3],
                      Selecttexte[4],
                      Selecttexte[5],
                      Selecttexte[6],
                      Selecttexte[7],
                      Selecttexte[8],
                      Selecttexte[9],
                      Selecttexte[10],NIL);  

  
  t[2]:=TagItem(GTCY_ACTIVE,zustand27);
  t[3]:=TagItem(GTCY_Labels,LONG(^Cycle27)); 
  t[4].ti_tag:=TAG_DONE;

  ng:=NewGadget(116,95,200,15,'Datens_ätze',mytattr,
                27,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[27]:=CreateGadgetA(CYCLE_KIND,dgads[26],^ng,^t);

  cycle28:=labels('1 Formular',
                  '2 Formulare',
                  '3 Formulare',
                  '4 Formulare',NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL);

  t[2]:=TagItem(GTCY_ACTIVE,zustand28);
  t[3]:=TagItem(GTCY_Labels,LONG(^Cycle28)); 
  t[4].ti_tag:=TAG_DONE;

  ng:=NewGadget(445,95,136,15,'_Nebeneinander',mytattr,
                28,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[28]:=CreateGadgetA(CYCLE_KIND,dgads[27],^ng,^t);  


  cycle29:=labels('WARENSENDUNG',
                  'Büchersendung',
                  'Päckchen',
                  'Paket',
                  'VORSICHT DATENTRÄGER !',
                  'VORSICHT ZERBRECHLICH !',
                  'INTEL OUTSIDE !',
                  '...',
                  NIL,
                  NIL,
                  NIL,
                  NIL,
                  NIL);
  t[2]:=TagItem(GTCY_ACTIVE,zustand29);
  t[3]:=TagItem(GTCY_Labels,LONG(^Cycle29)); 
  t[4].ti_tag:=TAG_DONE;

  ng:=NewGadget(150,113,250,15,'_Verwendungszweck',mytattr,
                29,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[29]:=CreateGadgetA(CYCLE_KIND,dgads[28],^ng,^t);  
  
  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(445,113,136,15,'Preise / In_fo',mytattr,
                30,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[30]:=CreateGadgetA(BUTTON_KIND,dgads[29],^ng,^t);

  ng:=NewGadget(5,134,140,15,'_Drucken',mytattr,
                31,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[31]:=CreateGadgetA(BUTTON_KIND,dgads[30],^ng,^t);
  
  ng:=NewGadget(446,134,140,15,'Ab_bruch (Esc)',mytattr,
                32,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[32]:=CreateGadgetA(BUTTON_KIND,dgads[31],^ng,^t);
  
  

  {**              Window Öffnen               **}
  t[1]:=TagItem(WA_InnerWidth,ww);
  t[2]:=TagItem(WA_InnerHeight,wh);
  t[3].ti_Tag:=WA_Title;
  t[3].ti_data:='AddiPro Formular drucken';
  t[4]:=TagItem(WA_Idcmp,IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_RAWKEY);
  t[5]:=TagItem(WA_Flags,WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE+
                WFLG_RMBTRAP+WFLG_DEPTHGADGET+WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH);
  t[6]:=TagItem(WA_Left,formulardruckwinleft); 
  t[7]:=TagItem(WA_Top,formulardruckwintop);
  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;

  fordruck:=OpenWindowTaglist(NIL,^t);
  IF fordruck=NIL THEN exit;
   raster(fordruck,0,1,592,150);
   clearq(fordruck,4,2,584,128);
   Rahmen(fordruck,4,2,585,129,TRUE);
   l:=addgList(fordruck,gl1,0,-1,NIL);
   refreshglist(fordruck^.firstgadget,fordruck,NIL,-1);
   GT_Refreshwindow(fordruck,NIL);
   dummy:=FALSE;
   REPEAT
   GetMessage(fordruck,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

        24 : BEGIN {O}
              ok:=ActivateGadget(dgads[1],fordruck,NIL);
             END;
        32 : BEGIN {A}  
              Butselecter(fordruck,dgads[2]);
              formularladen;
             END;
        57 : BEGIN {.}  
              Butselecter(fordruck,dgads[3]);
             { editier;}
             END;
        18 : BEGIN {E}  
              ok:=ActivateGadget(dgads[4],fordruck,NIL);
             END;
        40 : BEGIN {L}  
              Butselecter(fordruck,dgads[5]);
              absenderladenfor;
             END;
        33 : BEGIN {S}  
              Butselecter(fordruck,dgads[6]);
              absenderspeichern;
             END;
        23 : BEGIN {I}  
              ok:=ActivateGadget(dgads[7],fordruck,NIL);
             END;
        19 : BEGIN {R}  
              ok:=ActivateGadget(dgads[10],fordruck,NIL);
             END;
        25 : BEGIN {P}  
              ok:=ActivateGadget(dgads[13],fordruck,NIL);
             END;
        39 : BEGIN {K}  
              ok:=ActivateGadget(dgads[16],fordruck,NIL);
             END;
        21 : BEGIN {Z}  
              ok:=ActivateGadget(dgads[19],fordruck,NIL);
             END;
        20 : BEGIN {T}  
              ok:=ActivateGadget(dgads[22],fordruck,NIL);
             END;
        37 : BEGIN {H}  
              changecycler(fordruck,dgads[25],PTR(^Cycle25),4,zustand25);
             END;
        51 : BEGIN {C}  
              changecycler(fordruck,dgads[26],PTR(^Cycle26),2,zustand26);
             END;
        42 : BEGIN {Ä}  
              changecycler(fordruck,dgads[27],PTR(^Cycle27),12,zustand27);
             END;
        54 : BEGIN {N}  
              changecycler(fordruck,dgads[28],PTR(^Cycle28),4,zustand28);
             END;
        52 : BEGIN {V}  
              changecycler(fordruck,dgads[29],PTR(^Cycle29),5,zustand29);
             END;
        35 : BEGIN {F}  
              Butselecter(fordruck,dgads[30]);
              kommentare(dgads[29],zustand29);
             END;
        37 : BEGIN {D}  
              Butselecter(fordruck,dgads[31]);
             END;
     53,69 : BEGIN {B, ESC}  
              Butselecter(fordruck,dgads[32]);
              dummy:=TRUE;
             END;    
        ELSE END;
      END;

     IDCMP_GadgetUP:
        CASE gadnum OF
          2: formularladen;
          3: {editier};
          5: absenderladenfor;
          6: absenderspeichern;
          8: tiefer(fordruck,dgads[7],256,0);
          9: höher(fordruck,dgads[7],256,0);
         11: tiefer(fordruck,dgads[10],200,0);
         12: höher(fordruck,dgads[10],200,0);
         14: tiefer(fordruck,dgads[13],999,1);
         15: höher(fordruck,dgads[13],999,0);
         17: tiefer(fordruck,dgads[16],200,0);
         18: höher(fordruck,dgads[16],200,0);
         20: tiefer(fordruck,dgads[19],999,0);
         21: höher(fordruck,dgads[19],999,0);
         23: tiefer(fordruck,dgads[22],200,0);
         24: höher(fordruck,dgads[22],200,0);
         25:;
         26:;
         27:;
         28:;
         29: BEGIN
              if zustand29<7 THEN inc(zustand29)
                             ELSE zustand29:=0;
             END;
         30:kommentare(dgads[29],zustand29);
         31:;
         32: dummy:=TRUE;
        ELSE END;      
      ELSE END;
  
  UNTIL dummy;
  l:=removegList(fordruck,fordruck^.firstgadget,-1);
  formulardruckwinleft:=fordruck^.leftedge;
  formulardruckwintop:=fordruck^.topedge;
  Closewindow(fordruck);
  Freegadgets(gl1);  
  ComputeFont(MainWinWidth,MainWinHeight);
  ww := ComputeX(MainWinWidth);
  wh := ComputeY(MainWinHeight);
  Unbusywindow(wp,Mainreq);
 END;

 PROCEDURE briefladen
  BEGIN
   si:=dgads[1]^.specialinfo;
   briefname:=si^.buffer;
   IF filereqpattern('Serienbrief wählen',briefname,pfad,pats) THEN
   BEGIN
    t[1]:=TagItem(GTST_String,LONG(^briefname)); 
    t[2].ti_tag:=TAG_DONE;
    GT_SetGadgetAttrsA(dgads[1],serdruck,NIL,^t);
    refreshgadgets(dgads[1],serdruck,NIL);
   END;
  END;    


{************************************************************}

PROCEDURE serienende;   { schließt Serienfenster ... }
 BEGIN
  druckwin:=FALSE;  
 { WHILE msg<>NIL DO    
   BEGIN
    msg := GT_GetIMsg(serdruck^.UserPort);
    GT_ReplyIMsg(msg);
   END;}
  l:=removegList(serdruck,serdruck^.firstgadget,-1);
  seriendruckwinleft:=serdruck^.leftedge;
  seriendruckwintop:=serdruck^.topedge;   { Windowposition merken wird dann auch in den}
  Fenster_Zu(serdruck);                   { Preferences abgespeichert }
  freegadgets(gl1);
  msg:=NIL;
  serdruck:=NIL;
 END;

PROCEDURE serienbriefmsg;
{ verarbeitet die msgs für den serienbriefmodus }
 BEGIN
   msg := GT_GetIMsg(serdruck^.UserPort);
   WHILE (msg<>NIL) DO
   BEGIN
    class := msg^.Class;
    code := msg^.Code;
    qual := msg^.Qualifier;

    GT_ReplyIMsg(msg);

    CASE class OF
   
    IDCMP_CLOSEWINDOW: serienende;
  
    IDCMP_RAWKEY:
     IF qual in [32768,32769,32770,32772] THEN
      BEGIN
       CASE code OF
        54 : BEGIN {N}
              changecycler(serdruck,dgads[7],PTR(^Cyclelabels),12,zustand7);
             END;
        19 : BEGIN {R}
              ok:=ActivateGadget(dgads[1],serdruck,NIL);
             END;
        40 : BEGIN {L}
              Butselecter(serdruck,dgads[5]);
              absenderladenser;
             END;
     
        32 : BEGIN {A}
              Butselecter(serdruck,dgads[2]);
              briefladen;
             END;

        39 : BEGIN{K}
              Butselecter(serdruck,dgads[3]);
              kurzvorschau;
             END;
     
        34 : BEGIN{D}
              Butselecter(serdruck,dgads[9]);
              druck;
             END;
     
        18 : BEGIN{E}
              ok:=ActivateGadget(dgads[4],serdruck,NIL);
             END;
      
        33 : BEGIN
              Butselecter(serdruck,dgads[6]);  
              absenderspeichern;
             END;
     
        24 : BEGIN
              Butselecter(serdruck,dgads[8]);
              editier;  {o}
             END;
     
     69,53 : BEGIN {ESC,B}
              Butselecter(serdruck,dgads[10]);
              serienende;
             END;
      ELSE END;
      END;

    IDCMP_GADGETUP:
     BEGIN     
      KlickG := msg^.IAddress;
      GadNum := KlickG^.GadgetID;

      CASE Gadnum OF
       2 : briefladen;
       3 : Kurzvorschau; 
       5 : absenderladenser;
       6 : absenderspeichern;
       7 : BEGIN
            IF Zustand7<11 THEN inc(zustand7)
                           ELSE zustand7:=0;
           { nur für < OS39 nötig !}
           END;
     
        8 :  editier;
    
        9 : Druck;
    
       10 : serienende;
   
      ELSE END;   
   END;

   ELSE END;

   IF (msg<>NIL) THEN msg := GT_GetIMsg(serdruck^.UserPort);
  
  END; 
 END;

PROCEDURE serienbrief;
VAR buffer:STRING;   
    hilfi:INTEGER;
    
 
 BEGIN
  Cyclelabels:=labels('Aktueller Datensatz',
                      'Alle Datensätze',
                      Selecttexte[1],
                      Selecttexte[2],
                      Selecttexte[3],
                      Selecttexte[4],
                      Selecttexte[5],
                      Selecttexte[6],
                      Selecttexte[7],
                      Selecttexte[8],
                      Selecttexte[9],
                      Selecttexte[10],NIL);  


  dummy:=FALSE;
  Computefont(551,78);
  ww:=computeX(551);
  wh:=computeY(78);
  gl1:=NIL;
  gl1:=CreateContext(^gl1);
   
  IF holett('FORMULAR_PFAD',buffer) THEN pfad:=buffer
                                    ELSE pfad:='sys:';   { voreingestellter pfad }
  IF holett('ABSENDER_STRING',buffer) THEN absender:=buffer
                                      ELSE absender:='';
  IF holett('ABSENDER_DATEI',buffer) THEN absend:=buffer
                                     ELSE absend:='';  { dateiname des Absenders }
  IF holett('BRIEF_NAME',buffer) THEN briefname:=buffer
                                 ELSE briefname:='';
  IF holett('PATTERN_SERIENBRIEF',buffer) THEN pats:=buffer
                                          ELSE pats:='#?.ser';    
                                      { Pattern für Filerequester }
  IF holett('PATTERN_ABSENDER',buffer) THEN pata:=buffer
                                       ELSE pata:='#?.abs';
                                      { Pattern für Filerequester des Absenders }

  IF NOT holettint('DATENSÄTZE_BRIEF',hilfi) THEN zustand7:=0
  ELSE
   CASE hilfi OF
     1: zustand7:=2;
     2: zustand7:=3;
     3: zustand7:=4;
     4: zustand7:=5;
     5: zustand7:=6;
     6: zustand7:=7;
     7: zustand7:=8;
     8: zustand7:=9;
     9: zustand7:=10;
    10: zustand7:=11;
    11: zustand7:=0;
    12: zustand7:=1
   ELSE zustand7:=0;
 END; { OF CASE }
  
  t[1]:=TagItem(GT_Underscore,LONG('_'));
  t[2]:=TagItem(GTST_Maxchars,200);             
  t[3]:=TagItem(GTST_String,long(^Briefname));
  t[4].ti_tag:=TAG_DONE;
    
  ng:=NewGadget(100,5,200,15,'B_riefname',mytattr,
                1,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[1]:=CreateGadgetA(STRING_KIND,gl1,^ng,^t);

  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(301,5,120,15,'L_aden',mytattr,
                2,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[2]:=CreateGadgetA(BUTTON_KIND,dgads[1],^ng,^t);
    
  ng:=NewGadget(422,5,120,15,'_Kurzvorschau',mytattr,
                3,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[3]:=CreateGadgetA(BUTTON_KIND,dgads[2],^ng,^t);
  
  t[1]:=TAGITEM(GT_UNDERSCORE,LONG('_'));  
  t[2]:=TagItem(GTST_Maxchars,200);
  t[3]:=TagItem(GTST_String,LONG(^Absender)); 
  t[4].ti_tag:=TAG_DONE;
  
  ng:=NewGadget(100,23,200,15,'Abs_ender',mytattr,
                4,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[4]:=CreateGadgetA(STRING_KIND,dgads[3],^ng,^t);

  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(301,23,120,15,'_Laden',mytattr,
                5,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[5]:=CreateGadgetA(BUTTON_KIND,dgads[4],^ng,^t);
    
  ng:=NewGadget(422,23,120,15,'_Speichern',mytattr,
                6,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[6]:=CreateGadgetA(BUTTON_KIND,dgads[5],^ng,^t);
  
  zustand7:=0;
  t[2]:=TagItem(GTCY_ACTIVE,zustand7);
  t[3]:=TagItem(GTCY_Labels,LONG(^Cyclelabels)); 
  t[4].ti_tag:=TAG_DONE;

   ng:=NewGadget(100,41,200,14,'Date_nsätze',mytattr,
                7,PLACETEXT_LEFT,
                vi,NIL);
  sensitivgadget(ng);
  dgads[7]:=CreateGadgetA(CYCLE_KIND,dgads[6],^ng,^t);
    
  t[2].ti_tag:=TAG_DONE;  
  ng:=NewGadget(422,41,120,15,'... Edit_or',mytattr,
                8,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[8]:=CreateGadgetA(BUTTON_KIND,dgads[7],^ng,^t);
      
  ng:=NewGadget(5,61,140,15,'_Drucken',mytattr,
                9,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[9]:=CreateGadgetA(BUTTON_KIND,dgads[8],^ng,^t);
  
  ng:=NewGadget(406,61,140,15,'Ab_bruch (Esc)',mytattr,
                10,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[10]:=CreateGadgetA(BUTTON_KIND,dgads[9],^ng,^t);  
    
  t[1]:=TagItem(WA_InnerWidth,ww);
  t[2]:=TagItem(WA_InnerHeight,wh);
  t[3].ti_Tag:=WA_Title;
  t[3].ti_data:='AddiPro Serienbrief drucken';
  t[4]:=TagItem(WA_Idcmp,IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_RAWKEY);
  t[5]:=TagItem(WA_Flags,WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE+
                WFLG_DEPTHGADGET+WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH);
  t[6]:=TagItem(WA_Left,seriendruckwinleft);
  t[7]:=TagItem(WA_Top,seriendruckwintop);
  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;
  serdruck:=OpenWindowTaglist(NIL,^t);
  IF serdruck<>NIL THEN
  BEGIN
   raster(serdruck,{0,0,551,78}0,1,551,77);
   clearq(serdruck,4,2,543,55{56});
   Rahmen(serdruck,4,2,543,56,TRUE);
   l:=addgList(serdruck,gl1,0,-1,NIL);
   refreshglist(serdruck^.firstgadget,serdruck,NIL,-1);    { Gagets refreshen }
   druckmask := LONG(1) SHL LONG(serdruck^.UserPort^.mp_SigBit);
   druckwin:=TRUE;
  END;   
 END;
{ 

{ Zuerst wird ein Fenster geöffnet mit den 3 Druckmöglichkeiten
                 Formulare+Listenmodus+Serienbrief                }


PROCEDURE dreimöglichkeiten;
   
   PROCEDURE mach_zu;
    BEGIN
     l:=removegList(wp1,wp1^.firstgadget,-1);
     druckwinleft:=wp1^.leftedge;
     druckwintop:=wp1^.topedge;
     Fenster_Zu(wp1);         
     freegadgets(gl1);
     unbusywindow(wp,mainreq);
    END;
  
  
 BEGIN
  dummy:=FALSE; 
  Computefont(440,44);
  ww:=computeX(440);
  wh:=computeY(44);
  gl1:=NIL;
  gl1:=CreateContext(^gl1);

  t[1]:=TagItem(GT_Underscore,LONG('_'));
  t[2].ti_tag:=TAG_DONE;
  
  ng:=NewGadget(9,5,140,15,'_Formularmodus',mytattr,
                1,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[1]:=CreateGadgetA(BUTTON_KIND,gl1,^ng,^t);

{}  t[2]:=TagItem(GA_disabled,LONG(TRUE));
{}  t[3].ti_tag:=TAG_DONE;
  
  ng:=NewGadget(150,5,140,15,'_Listenmodus',mytattr,
                2,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[2]:=CreateGadgetA(BUTTON_KIND,dgads[1],^ng,^t);
    
{}  t[2].ti_tag:=TAG_DONE;
  ng:=NewGadget(291,5,140,15,'_Serienbriefmodus',mytattr,
                3,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[3]:=CreateGadgetA(BUTTON_KIND,dgads[2],^ng,^t);
    
  ng:=NewGadget(291,26,140,15,'Ab_bruch (Esc)',mytattr,
                4,PLACETEXT_IN,
                vi,NIL);
  sensitivgadget(ng);
  dgads[4]:=CreateGadgetA(BUTTON_KIND,dgads[3],^ng,^t);  

  t[1]:=TagItem(WA_InnerWidth,ww);
  t[2]:=TagItem(WA_InnerHeight,wh);
  t[3].ti_Tag:=WA_Title;
  t[3].ti_data:='AddiPro Druckmodi';
  t[4]:=TagItem(WA_Idcmp,IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_RAWKEY);
  t[5]:=TagItem(WA_Flags,WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE+
                WFLG_DEPTHGADGET+WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH);
  t[6]:=TagItem(WA_Left,druckwinleft);
  t[7]:=TagItem(WA_Top,druckwintop);
  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;

  wp1:=OpenWindowTaglist(NIL,^t); 
  IF wp1<>NIL THEN
  BEGIN
   raster(wp1,0,1,439{0,440},44);
   clearq(wp1,4,2,432,{21}20);
   Rahmen(wp1,4,2,432,21,TRUE);
   l:=addgList(wp1,gl1,0,-1,NIL);
   refreshglist(wp1^.firstgadget,wp1,NIL,-1);    { Gagets refreshen }
   REPEAT
   GetMessage(wp1,class,code,qual,gadnum);
   CASE class OF
   
    IDCMP_CLOSEWINDOW: 
     BEGIN
      dummy:=TRUE;
      mach_zu;
     END;
  
    IDCMP_RAWKEY:
     IF qual in [32768,32769,32770,32772] THEN
      BEGIN
       CASE code OF
        35 : BEGIN
              ButSelecter(wp1,dgads[1]);
              mach_zu;
              Formularmodus;
              dummy:=TRUE;
             END;
        40 : BEGIN
              ButSelecter(wp1,dgads[2]);
              mach_zu;
              dummy:=TRUE;
             END;  
        33 : BEGIN
              Butselecter(wp1,dgads[3]);
              mach_zu;
              Serienbrief;
              dummy:=TRUE;
             END;
     69,53 : BEGIN {ESC,B}
              Butselecter(wp1,dgads[4]);
              mach_zu;
              dummy:=TRUE;
             END;
      ELSE END;
      END;
     
    IDCMP_GADGETUP:
     
     CASE Gadnum OF
      1 : BEGIN
           mach_zu;
           formularmodus;
           dummy:=TRUE;
          END;
      2 : BEGIN
           mach_zu;
           {Listenmodus;}
           dummy:=TRUE;
          END;
      3 : BEGIN
           mach_zu;
           serienbrief;   
           dummy:=TRUE;
          END;
      4 : BEGIN
     mach_zu;
     dummy:=TRUE;
    END;
      
     ELSE END;   
    ELSE END;
  UNTIL dummy;   
  END;   
 END;
 
PROCEDURE drucken;            { der eigentliche Druckanfang }
BEGIN
 IF serdruck=NIL THEN
 dreimöglichkeiten ELSE unbusywindow(wp,mainreq);
END; 

}
{$endif}
