/*
 *          mainE.c          © by Martin Steppler
 */

#define QUAL_SHIFT   0x01
#define QUAL_CTRL    0x02
#define QUAL_AMIGA   0x04
#define QUAL_ALT     0x08
#define QUAL_LMB     0x10
#define QUAL_MMB     0x20
#define QUAL_RMB     0x40

BYTE pfadundfile[PATHSTRSIZE+FILESTRSIZE+12];
struct FSRequest MyFSReq;
struct Gadget ArrowGads[2], VertSlider;
int numentries, topentry;

/* detaching */
ULONG _BackGroundIO = 0;
ULONG _stack = 4096L;
ULONG _priority = 4L;
char *_procname = "(-8 TextPlus2.2E 8-)";


main(argc, argv)
int argc;
char *argv[];
{
   static ULONG  lsecs = 0L, lmics = 0L;   /* For detecting DoubleClick */
   int len=0, init=2;

   SEITE=sei=71, MAX=ABSMAX; y=MIY; MAY=ABSMAY; sicher=TRUE; YKOD=ABSMAY*8-1; x=MIX;
   MAS=150; snum=schrift=zg1=zg2=1; zg3=znum=5; zg4=75; zg5=72; se=-1; icfy=2;
   kbuf[0]=EOS; kbufcode=numentries=topentry=bak=0; iconx=-1; icony=12;
   grokle=ein=off=z=s=ze=meld=blo=ausri=vonri=stil=au=br=letztes=spe=zpe=0;
   strcpy(tab,"1001001001001001001001001001001001001001001001001001001001001001001001001001000");

   Oeffnen();
   strcpy(MyFSReq.matchpattern,"*");
   strcpy(MyFSReq.dirname,     ":");
   MyFSReq.leftedge     = 72;
   MyFSReq.topedge      = 14;
   MyFSReq.sorttype     =  0;
   MyFSReq.flags        = FS_SHOW_DIRS_FIRST;
   MyFSReq.fullname     = pfadundfile;
   MyFSReq.pathgadstr   = "PATH";
   MyFSReq.readingstr   = "Reading directory...";
   MyFSReq.sortingstr   = "Sorting ...";
   MyFSReq.emptydirstr  = "Directory is empty!";
   MyFSReq.nomatchstr   = "No file matched the pattern!";
   MyFSReq.selectfilestr= "Choose filename:";
   MyFSReq.selectstr    = "Okay";
   MyFSReq.cancelstr    = "Cancel";
   se=0;
   if(argc>=2) {
      if(!strcmp(argv[1], "-i")) {
         init=5;
         if(argc>=3) { init++; strcpy(titel, argv[2]); }
         else sprintf(titel, "Yet_untitled");
      }
      else if(argc>=3) {
         if(!strcmp(argv[2], "-i")) { init=6; strcpy(titel, argv[1]); }
      }
   }
   Iconify(init);
   if(init==2 && argc==2) {
      if(!FastLoad(argv[1])) {
         NamenSetzen(argv[1]); strcpy(titel,argv[1]);
         InitSlider(&VertSlider);
      }
   }
   else if(init==2) {
      NamenSetzen("Yet_untitled");
      sprintf(titel, "Yet_untitled");
   }
   if(init==2) { Cursor(2); Cursor(1); }

   FOREVER
   {
      if(((topentry>=MAY-MIY+(len=s*(SEITE+1)+z)) || (topentry<=len+MIY-MAY) ||
          numentries!=(se*(SEITE+1)+ze)) && icfy) {
         topentry=len; InitSlider(&VertSlider);
      }
      Wait(1 << Fenster -> UserPort -> mp_SigBit);
      while((nachricht=(struct IntuiMessage *) GetMsg(Fenster->UserPort))!=0L) {
         switch(nachricht->Class) {
            case RAWKEY:
               Cursor(0); Tastaturabfrage(); Cursor(1);
               break;
            case CLOSEWINDOW:
               if(sicher == TRUE) {
                  Schluss();
                  exit(RETURN_OK);
               }
               else if(icfy) {
                  if(auto_frage(FrageText[0]) == TRUE) {
                     Schluss();
                     exit(RETURN_OK);
                  }
               }
               else {
                  sicher=TRUE; strcpy(Title, "»»» REALLY? «««  ");
                  for(len=(nw.Width-36)/8-17; len>0; len--) strcat(Title, " ");
                  SetWindowTitles(Fenster, Title, (char *)-1);
               }
               break;
            case MENUPICK:
               if(MENUNUM(nachricht->Code) != MENUNULL) {
                  Cursor(0);
                  Menueabfrage(MENUNUM(nachricht->Code), ITEMNUM(nachricht->Code));
                  Cursor(1);
               }
               break;
            case MOUSEBUTTONS:
               switch(nachricht->Code) {
                  case MENUDOWN:
                     icfy=3;
                     break;
                  case SELECTDOWN:
                     Cursor(0);
                     if(DoubleClick(lsecs, lmics, nachricht->Seconds, nachricht->Micros)) {
                        if(blo<=2) {
                           BlockMarkieren();
                           if(meld==TRUE) Meldung();
                        }
                        else {
                           if(nachricht->Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
                              BlockLoeschen(bas,baz,bes,bez);
                           else if(nachricht->Qualifier & (IEQUALIFIER_LALT|IEQUALIFIER_RALT))
                              MarkierungLoeschen();
                           else
                              BlockEinfuegen(bas,baz,bes,bez);
                           Meldung();
                        }
                     }
                     else {
                        lsecs = nachricht->Seconds;
                        lmics = nachricht->Micros;
                        Tabulator(FALSE, Fenster->GZZMouseX, Fenster->GZZMouseY);
                     }
                     meld=FALSE; Cursor(1);
                     break;
                  default:
                     break;
               }
               break;
            case NEWSIZE:
               Cursor(0); NeueGroesse(); Cursor(1);
               break;
            case INTUITICKS:
               if(ArrowGads[0].Flags&SELECTED) {
                  Cursor(0); GetSlider(&VertSlider,-1); Cursor(1);
               }
               else if(ArrowGads[1].Flags&SELECTED) {
                  Cursor(0); GetSlider(&VertSlider, 1); Cursor(1);
               }
               else if(VertSlider.Flags&SELECTED) {
                  Cursor(0); GetSlider(&VertSlider, 0); Cursor(1);
               }
               else if(blo==2) {
                  if(y==MAY && Fenster->GZZMouseY > (MAY-1)*8 ) {
                      Cursor(0); YZPlus();  Cursor(1);
                  }
                  else if(y==MIY && Fenster->GZZMouseY < MIY*8) {
                      Cursor(0); YZMinus(); Cursor(1);
                  }
               }
               break;
            case GADGETUP:
               if(((struct Gadget *)nachricht->IAddress)->GadgetID == 2) {
                  Cursor(0); GetSlider(&VertSlider, 0); Cursor(1);
               }
               break;
            case MOUSEMOVE:
               if(blo==2) {
                  Cursor(0);
                  Tabulator(2, Fenster->GZZMouseX, Fenster->GZZMouseY);
                  Cursor(1);
               }
               break;
            default:
               break;
         }
         ReplyMsg(nachricht);
      }
      if(icfy==3) {
         Iconify(1);
         if(init==6) {
            if(!FastLoad(titel)) InitSlider(&VertSlider);
            init=2; Cursor(2);
         }
         else SText();
         Cursor(1);
      }
      else if(icfy==4) {
         Cursor(0); Iconify(0);
      }
   }
}
Menueabfrage(menue, punkt)
int menue, punkt;
{
   switch(menue) {
      case 0:                                  /* Dokument */
         switch(punkt) {
            case 0:                            /* Laden */
               if(disk(TitelText[0])) {
                  if(sicher == TRUE)
                     TLaden(pfadundfile);
                  else if(auto_frage(FrageText[2])==TRUE)
                     TLaden(pfadundfile);
               }
               break;
            case 1:                            /* Text Anhängen */
               if(disk(TitelText[1]))
                  TextAnhaengen(pfadundfile);
               break;
            case 3:                            /* Text Löschen */
               if(sicher == TRUE) {
                  TLoeschen();
                  break;
               }
               if(auto_frage(FrageText[1]) == TRUE) {
                  TLoeschen();
                  sicher == TRUE;
               }
               break;
            case 5:                            /* Speichern */
               Speichern(titel, 0,0,se,ze);
               break;
            case 6:                            /* Speichern als ... */
               if(disk(TitelText[2]))
                  Speichern(pfadundfile, 0, 0, se, ze);
               break;
            case 7:                            /* Speichern & Beenden */
               if(Speichern(titel, 0,0,se,ze)==TRUE) {
                  Schluss();
                  exit(RETURN_OK);
               }
               break;
            case 9:                                /* Drucken */
               drucken(TitelText[5], 0, 0, se, ze);
               break;
            case 11:                               /* Iconify */
               icfy=4;
               if(blo==2) blo==3;
               break;
            case 12:                               /* Hilfe */
               Hilfe();
               break;
            case 13:                               /* Info */
               nein_text.IText = (UBYTE *) "READ!";
               AutoRequest(Fenster,&InfoText[0],NL,&nein_text,0,0,352,200);
               nein_text.IText = (UBYTE *) "NO!";
               break;
            case 15:                               /* Ende */
               if(sicher==TRUE) {
                  Schluss();
                  exit(RETURN_OK);
               }
               if(auto_frage(FrageText[0])==TRUE) {
                  Schluss();
                  exit(RETURN_OK);
               }
               break;
         }
         spe=zpe=0; break;
      case 1:                                       /* Editieren */
         switch(punkt) {
            case 0:                                 /* Block markieren */
               BlockMarkieren();
               if(meld==TRUE) {
                  meld=FALSE; Meldung();
               }
               break;
            case 2:                                /* Block kopieren */
               BlockEinfuegen(bas,baz,bes,bez);
               meld=FALSE; Meldung();
               break;
            case 3:                                /* Block Löschen */
               BlockLoeschen(bas,baz,bes,bez);
               meld=FALSE; Meldung();
               break;
            case 5:                             /* Markierung löschen */
               MarkierungLoeschen();
               meld=FALSE; Meldung();
               break;
            case 7:                                 /* Block Laden */
               if(disk(TitelText[3])) {
                  if(se==MAS && ze==SEITE) {
                     sprintf(buffer, "%s", FehlerText[2]);
                     Meldung();
                  }
                  if(se==s && ze==z) {
                     TextAnhaengen(pfadundfile); break;
                  }
                  sprintf(buffer, "Loading %s!", pfadundfile);
                  Meldung();
                  BLaden(pfadundfile);
                  if(meld==TRUE) { Meldung(); meld=FALSE; }
               }
               break;
            case 8:                                 /* Block Speichern */
               if(disk(TitelText[4])) {
                  Speichern(pfadundfile, bas, baz, bes, bez);
                  sicher = FALSE;
               }
               break;
            case 10:                                /* Block Drucken */
               drucken(TitelText[6], bas, baz, bes, bez);
               break;
         }
         spe=zpe=0; break;
      case 2:                                      /* Einstellungen */
         switch(punkt) {
            case 0:                                /* Seitenlänge */
               einstell(TitelText[7], 0, se, ze);
               break;
            case 1:                                /* Textbreite */
               einstell(TitelText[8], 1, se, ze);
               if(x>MAX) x=MAX; break;
            case 3:                                /* Einfügen */
               Einfuegen();
               break;
            case 4:                                /* Brief / ASCII */
               Brief();
               break;
            case 5:                                /* Auto-Trenn */
               Auto();
               break;
            case 6:                                /* Backup */
               Backup(); Meldung();
               break;
            case 8:                               /* Gehe zu ... */
               Gehezu(0);
               break;
            case 9:                               /* Gehe zur x. Zeile */
               Gehezu(1);
               break;
         }
         spe=zpe=0; break;
      case 3:                                      /* Schrift */
         switch(punkt) {
            case 0:                                /* Normal */
               Schriftart(0);
               break;
            case 1:                                /* Unterstrichen */
               Schriftart(1);
               break;
            case 2:                                /* Fett */
               Schriftart(2);
               break;
            case 3:                                /* Kursiv */
               Schriftart(4);
               break;
            case 5:                                /* Linksbündig */
               Ausrichtung(LINKS);
               break;
            case 6:                                /* Rechtsbündig */
               Ausrichtung(RECHTS);
               break;
            case 7:                                /* Zentriert */
               Ausrichtung(ZENTRIERT);
               break;
            case 8:                                /* Blocksatz */
               Ausrichtung(BLOCKSATZ);
               break;
         }
         break;
      case 4:                                      /* Suchen         */
         switch(punkt) {
            case 0:                                /* Suchen         */
               Gehezu(2);
               break;
            case 1:                                /*  "" nächstes   */
               Suchen(0);
               break;
            case 2:                                /*  "" vorheriges */
               Suchen(2);
               break;
            case 4:                                /* Ersetzen       */
               Gehezu(3);
               break;
            case 5:                                /*  "" nächstes   */
               Suchen(1);
               break;
            case 6:                                /*  "" vorheriges */
               Suchen(3);
               break;
         }
         break;
   }
}
Tastaturabfrage()
{
   int ss, zz, qual, marke=TRUE, len;
   UBYTE KeyBuffer[10];

   if (nachricht->Class != RAWKEY)           return(-2);
   if (nachricht->Code & IECODE_UP_PREFIX)   return(-2);
   len = DeadKeyConvert(nachricht, KeyBuffer, sizeof(KeyBuffer), NULL);
   if(len==1 && ((KeyBuffer[0]>=32 && KeyBuffer[0]<=126) || KeyBuffer[0]>=160)) {
      sicher = FALSE;
      sprintf(buffer, "%c", KeyBuffer[0]);
      StilAn();
      if(blo>=2) {
         if(blo==2 || (blo>2 && BloPruef())) SetAPen(RP, ROT);
      }
      Move(RP, (x-off)*8-8, y*8-2);
      Text(RP, buffer, 1); if(blo) SetAPen(RP, WEISS);
      Buchstabe(KeyBuffer[0]);
      XPlus();
      if(meld == TRUE) Meldung();
      else ZSDisplay();
      meld=FALSE;
   }
   else if(len>0) {
      qual = 0;
      if (nachricht->Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
          qual |= QUAL_SHIFT;
      if (nachricht->Qualifier & (IEQUALIFIER_CONTROL))
          qual |= QUAL_CTRL;
      if (nachricht->Qualifier & (IEQUALIFIER_LALT|IEQUALIFIER_RALT))
          qual |= QUAL_ALT;
      /*
      if (nachricht->Qualifier & (IEQUALIFIER_LCOMMAND|IEQUALIFIER_RCOMMAND))
          qual |= QUAL_AMIGA;
      if ((nachricht->Qualifier & IEQUALIFIER_CAPSLOCK) &&
           actual == 1 && KeyBuffer[1] >= 'a' && KeyBuffer[1] <= 'z')
          qual |= QUAL_SHIFT;
      if (nachricht->Qualifier & IEQUALIFIER_LEFTBUTTON)
          qual |= QUAL_LMB;
      if (nachricht->Qualifier & IEQUALIFIER_MIDBUTTON)
          qual |= QUAL_MMB;
      if (nachricht->Qualifier & (IEQUALIFIER_RBUTTON))
          qual |= QUAL_RMB;
      */
      switch(KeyBuffer[0]) {
         case 155:
            switch(KeyBuffer[1]) {
               case 68:             /* Crsr left */
                  if((qual & QUAL_CTRL) && blo>2) BlockSchieben(1);
                  else if(qual & QUAL_ALT) JumpWord(0);
                  else XMinus();
                  break;
               case 67:             /* Crsr right */
                  if((qual & QUAL_CTRL) && blo>2) BlockSchieben(0);
                  else if(qual & QUAL_ALT) JumpWord(1);
                  else XPlus();
                  break;
               case 66:
                  if(qual & QUAL_CTRL) {           /* d4 Seite vorwärts */
                     y=MIY; z=spe=zpe=0;
                     if(++s>se) { s=se; z=ze; marke=FALSE; }
                     ss=s; zz=z; FastText();
                     if(marke==FALSE) zz=z;
                     meld=FALSE; s=ss; z=zz; y=MIY; ZSDisplay();
                     if(s==se && z==ze) {
                        sprintf(buffer, "%s", FehlerText[1]);
                        meld = TRUE;
                     }
                  }
                  else if(qual & QUAL_ALT) {          /* s19 Textende */
                     s=se; z=ze; y=MIY; zpe=spe=0;
                     FastText();
                  }
                  else {
                     YZPlus(); spe=zpe=0; /* Crsr down */
                  }
                  break;
               case 65:
                  if(qual & QUAL_CTRL) {          /* f6 Seite rückwärts */
                     y=MIY;
                     if(z==0) {
                        if(--s<0) {
                           s=0; marke=55;
                        }
                     }
                     z=zpe=spe=0; ss=s; if(blo==2) blo=6;
                     FastText(); meld=FALSE;
                     z=0; s=ss; y=MIY; ZSDisplay();
                     if(marke==55 || (s==0 && z==0)) {
                        marke=meld=TRUE;
                        sprintf(buffer, "%s", FehlerText[0]);
                     }
                  }
                  else if(qual & QUAL_ALT) {          /* a1 Textanfang */
                     s=z=zpe=spe=0; y=MIY; if(blo==2) blo=6;
                     SText();
                     ZSDisplay();
                     sprintf(buffer, "%s", FehlerText[0]);
                     meld=TRUE;
                  }
                  else {
                     YZMinus(); spe=zpe=0;    /* Crsr Up */
                  }
                  break;
               case 84:            /* Shift up */
                  spe=zpe=0;
                  if(y==MIY) {
                     CrsrHoch(); topentry=s*(SEITE+1)+z; InitSlider(&VertSlider);
                  }
                  else
                     CrsrTop();
                  break;
               case 83:            /* Shift down */
                  spe=zpe=0;
                  if(y==MAY) {
                     y=MIY;
                     FastText();
                     topentry=s*(SEITE+1)+z; InitSlider(&VertSlider);
                  }
                  else
                     CrsrBot();
                  break;
               case 32:
                  switch(KeyBuffer[2]) {
                     case 64:                        /* Shift right */
                        ss=x; zz=SL(s,z);
                        x=zz-SC(s,z,zz)+1; if(x>MAX) x=MAX;
                        if(x-MAX1>=off) {
                           if(ss==MAX1-1+off) {
                              off+=OFF1; if(x-MAX1>=off) x=MAX1-1+off;
                              SText(); meld=FALSE;
                           }
                           else x=MAX1-1+off;
                        }
                        if(x<=off) { off=(x/MAX1)*OFF1; SText(); }
                        meld=FALSE;
                        break;
                     case 65:                       /* Shift left */
                        if(x==off+1 && off) {
                           x-=OFF1; off-=OFF1; SText(); meld=FALSE;
                        }
                        else x=off+1;
                        break;
                  }
                  break;
               case 63:                          /* HELP */
                  Hilfe();
                  break;
               case 90:                             /* BACKTAB */
                  FOREVER {
                     XMinus();
                     if(meld == TRUE || tab[x-off-1]=='1') break;
                  }
                  break;
            }
            break;
         case 9:                                   /* TAB */
            if(qual & QUAL_CTRL) {                /* CTRL - TAB */
               if(blo>2) BlockSchieben(3);
               else {
                  FOREVER {
                     if(x==MIX) break;
                     BSpace();
                     if(tab[x-off-1]=='1') break;
                  }
               }
            }
            else {
               FOREVER {
                  if(qual & QUAL_ALT) {              /* ALT - TAB */
                     if(blo>2) { BlockSchieben(2); break; }
                     else {
                        sprintf(buffer, " ");
                        StilAn(); Move(RP, (x-off)*8-8, y*8-2);
                        Text(RP, buffer, 1);
                        Buchstabe(buffer[0]);
                     }
                  }
                  XPlus();
                  if(meld == TRUE || tab[x-off-1]=='1') break;
               }
            }
            break;
         case 13:                                 /* Return */
            if(qual & QUAL_SHIFT) {     /* l12 Zeile einfügen */
               ss=x; x=MIX; CarRet(); x=ss;
               YZMinus(); BelAend(s,z,kbufcode,strlen(kbuf),0);
               strcpy(a[s] [z], kbuf);
               if(kbufcode) SonderDruck(y, SL(s,z), 0);
               else         NormalDruck(y, SL(s,z), 0);
            }
            else
               CarRet();
            spe=zpe=0; break;
         case 8:                                  /* Backspace */
            if(qual & QUAL_ALT)             /* Wort links des Crsr löschen */
               CDel(1);
            else if(qual & QUAL_CTRL)     /* Alles links vom Crsr löschen */
               CDel(2);
            else if(qual & QUAL_SHIFT)    /* Alle Spaces rechts vom Crsr löschen */
               CDel(3);
            else
               BSpace();
            sicher = FALSE;
            break;
         case 127:                                /* Delete */
            if(qual & QUAL_SHIFT) {           /* j10 Zeile löschen */
               strcpy(kbuf, a[s] [z]);
               kbufcode = SC(s,z,SL(s,z));
               ZeileLoeschen();
               spe=zpe= FALSE;
            }
            else if (qual & QUAL_CTRL)      /* k11 Rest der Zeile löschen */
               RestLoeschen();
            else if (qual & QUAL_ALT)      /* Wort rechts des Crsr löschen */
               CDel(0);
            else
               Del();
            sicher = FALSE;
            break;
         case 5:
            Einfuegen();                    /* Ctrl-e Einfügen An/Aus */
            break;
         case 20:                           /* Ctrl-t Textlänge anzeigen */
            Textlaenge();
            break;
         case 2:                            /* Ctrl-b Block markieren */
            if(blo<3) BlockMarkieren();
            break;
         case 4:                           /* Ctrl-d Markierung löschen */
            if(blo!=0) MarkierungLoeschen();
            break;
         case 24:                           /* Ctrl-x Block löschen */
            if(blo==3) BlockLoeschen(bas,baz,bes,bez); spe=zpe=0;
            break;
         case 3:                            /* Ctrl-c Block kopieren */
            if(blo==3) BlockEinfuegen(bas,baz,bes,bez); spe=zpe=0;
            break;
         case 17:                           /* Ctrl-q Abspeichern u. Schluss */
            if(auto_frage(FrageText[3])==TRUE) {
               if(Speichern(titel, 0,0,se,ze)==TRUE) {
                  Schluss();
                  exit(RETURN_OK);
               }
            }
            break;
         case 7:                            /* Ctrl-g Gehe zu ... */
            meld=TRUE; spe=zpe=0;
            Gehezu(0);
            break;
         case 12:                           /* Ctrl-l Gehe zur x. Zeile */
            meld=TRUE; spe=zpe=0;
            Gehezu(1);
            break;
         case 14:                           /* Ctrl-n Normal */
            Schriftart(0);
            break;
         case 15:                            /* Ctrl-o Fett  */
            Schriftart(2);
            break;
         case 11:                           /* Ctrl-k Kursiv */
            Schriftart(4);
            break;
         case 21:                           /* Ctrl-u Unterstrichen */
            Schriftart(1);
            break;
         case 18:                           /* Ctrl-r Brief An/Aus */
            Brief();
            break;
         case 1:                            /* Ctrl-y Auto An/Aus */
            Auto();
            break;
         case 16:                           /* Ctrl-p Backup An/Aus */
            Backup(); meld=TRUE;
            break;
         case 27:                               /* ESC  Ende */
            if(sicher == TRUE) {
               Schluss();
               exit(RETURN_OK);
            }
            if(auto_frage(FrageText[0])==TRUE) {
               Schluss();
               exit(RETURN_OK);
            }
            break;
         default:
            marke = FALSE;
      }
      if(meld == TRUE)  Meldung();
      if(meld == FALSE) ZSDisplay();
      meld = FALSE;
   }
}
Hilfe()
{
   UBYTE c;
   int len, ss=s, zz=z, yy=y;

   SetAPen(RP, 0);
   RectFill(RP, 0, 32, RRAND, YKOD+2);
   SetAPen(RP, 1);
   StilAus();
   for(len=0; len<=MAY-MIY; len++) {
      Move(RP, 0, (len+MIY)*8-2);
      Text(RP, HilfeText[len], strlen(HilfeText[len]));
   }
   StilAn();
   while(!ConsoleGetKey()) ;
   s=ss; z=zz; y=yy;
   SText(); meld=FALSE;
   ZSDisplay();
}
Iconify(modus)
int modus;
{
   static int oldheight = 0, oldtopedge = 0 ;

   if(!modus || modus>=5) {
      if(modus>=5) {
         ErstBel(0,0);
         if(!LadeConfig("TxP.Config")) LadeConfig("s:TxP.Config");
         ein = (ein) ? FALSE:TRUE; modus=0;
      }
      else {
         oldheight  = Fenster->Height;
         oldtopedge = Fenster->TopEdge;
      }
      if(Fenster->MenuStrip)  ClearMenuStrip(Fenster, &Menus[0]);
      if(Fenster)             CloseWindow(Fenster);
      if(Scheibe)             CloseScreen(Scheibe);
      nw.Height      = 10;
      nw.Width       = 36 + strlen(titel)*8;
      if(nw.Width<172) nw.Width=172;
      if(iconx < 0) {
         nw.LeftEdge = 636 - nw.Width;
      }
      else {
         if(iconx+nw.Width>640) nw.LeftEdge = 0;
         else nw.LeftEdge = iconx;
      }
      if(icony<0 || icony>189) nw.TopEdge = 1;
      else nw.TopEdge = icony;
      nw.Title = NULL;
      strcpy(Title, titel); strcat(Title, "                ");
      nw.IDCMPFlags  = ICONIDCMP;
      nw.Flags       = ICONFLAGS;
      nw.Type        = WBENCHSCREEN;
      nw.Screen      = NULL;
      MyFSReq.userscreen = NULL;
   }
   else {
      if(modus==1) {
         icony = Fenster->TopEdge;
         CloseWindow(Fenster);
      }
      if(!oldheight)   oldheight=199;
      if(!oldtopedge)  oldtopedge=1;
      nw.LeftEdge    = 0;
      nw.TopEdge     = oldtopedge;
      nw.Height      = oldheight;
      nw.Width       = 640;
      nw.IDCMPFlags  = IDCMPFLAGS;
      nw.Flags       = FLAGS;
      nw.Title       = NULL;
      nw.Type        = CUSTOMSCREEN;
      if(!(Scheibe = (struct Screen *) OpenScreen(&NeuScheibe))) {
         printf("Can't open screen!\n");
         Schluss(); exit(FALSE);
      }
      nw.Screen = (struct Screen *)Scheibe;
      MyFSReq.userscreen   = (struct Screen *)Scheibe;
   }
   if(!(Fenster = (struct Window *)OpenWindow(&nw))) {
      printf("Can't open window!\n");
      Schluss(); exit(FALSE);
   }
   RP=Fenster->RPort;
   if(modus) {
      strcpy(Title, VERSION);
      SetWindowTitles(Fenster, Title, Scheibe);
      SetMenuStrip(Fenster, &Menus[0]); MenueUeberwachung(0);
      AddGList(Fenster, &VertSlider, 0, -1, NULL);
      RefreshGList(&VertSlider, Fenster, NULL, -1);
      if(modus==2) {
         ErstBel(0,0);
         if(!LadeConfig("TxP.Config")) LadeConfig("s:TxP.Config");
         Einfuegen();
      }
      TitelZeile(); ZSDisplay();
      Tabulator(TRUE,FALSE,FALSE); MenueUeberwachung(3); NamenSetzen(titel);
   }
   else SetWindowTitles(Fenster, Title, (char *)-1);
   icfy=modus;
}
