#include <stdio.h>
#include <stdlib.h>

/*Funktion zum Anhängen eines Strings an den anderen*/
char *ownstrcat(char *dest, char *src)
{
 char *sav;

 sav = dest;
 while (*dest)
    ++dest;
 while (*dest++ = *src++);

 return sav;
}

/*Funktion um aus dem String ein Lauffähigen Kommandonamen zu
erzeugen damit das Programm getestet werden kann
z.B. aus Hello.c wird Hello */
char *kommandoname(char *dest, char *src)
{
 while ((*dest++ = *src++) && (*src != '.'));

 *dest++='\0';

 return dest;
}

/*Funktion zum löschen des Inhaltes eines Arrays*/
char *empty(char *dest)
{
 *dest = '\0';
 return dest;
}



int main()
{
 int wahl;
 char temp[100],temp2[100],temp3[100];
 char editor [] = "emacs "; /*Bitte anpassen*/
 char compiler[] = "gcc";   /*Ebenfalls anpassen*/
 char kommandozeile[100];
 temp[0] = '\0';

 do{
      printf("-1- Programm Editieren\n");
      printf("-2- Programm compilieren\n");
      printf("-3- Programm ausführen\n");
      if(temp[0]!='\0')
        printf("-4- Weiter Editieren von %s\n",temp);
      else
        printf("-4- Noch keine Datei zum Editieren erstellt\n");
      printf("-5- Ende\n");
      printf("Ihre Auswahl bitte : ");
      scanf("%d",&wahl);
      switch(wahl)
       {
        case 1 : empty(kommandozeile);
                 printf("Welches Programm wollen sie editieren : ");
                 scanf("%s",temp);
                 ownstrcat(kommandozeile,editor);
                 ownstrcat(kommandozeile,temp);
                 system(kommandozeile);
                 break;
        case 2 : empty(kommandozeile);
                 sprintf(kommandozeile,"%s -o %s %s",
                         compiler,kommandoname(temp2,temp),temp);
                 system(kommandozeile);
                 break;
        case 3 : empty(kommandozeile);
                 sprintf(temp3,"./%s",kommandoname(temp2,temp));
                 system(temp3);
                 empty(temp2);
                 empty(temp3);
                 break;
        case 4 : empty(kommandozeile);
                 ownstrcat(kommandozeile,editor);
                 ownstrcat(kommandozeile,temp);
                 system(kommandozeile);
                 break;
        default: break;
       }
   }while(wahl != 5);
 return 0;
}