#include <stdio.h>
#include <string.h>

enum{FALSE,TRUE};

void show_help(void)
{
   printf("\nProgrammaufruf : echo [OPTION] STRING\n");
   printf("Programm gibt den Text in gewünschter Form auf dem Bildschirm aus\n");
   printf("\nFolgende Optionen stehen Ihnen zur Verfügung : \n\n");
   printf("\t-r  Text wird Spiegelverkehrt ausgegeben\n");
   printf("\t-g  Text wird in Grossbuchstaben ausgegeben\n");
   printf("\t-s  Text wird in Kleinbuchstaben ausgegeben\n");
   printf("\t-h  Dieser Text\n");
   printf("\t-v  Versionsnummer\n\n");
}

int getopt(char *argument,char *option)
{
 if( argument[0]=='-' && argument[1]==option[0] )
   return TRUE;
 return FALSE;
}

void spiegeln(char *string)
{
 char *reverse=string;
 while(*reverse++);
 while(*reverse-- != *string)
   printf("%c",*reverse);
 printf("\n");
}

void larger(char *string)
{
 char *large=string;
 while(*large)
  printf("%c",(isalpha(*large))?toupper(*large++):*large++);
 printf("\n");
}

void smaller(char *string)
{
  char *small=string;
 while(*small)
   printf("%c",(isalpha(*small))?tolower(*small++):*small++);
 printf("\n");
}


int main(int argc, char *argv[])
{
 int counter=3;
 char buffer[4096];
 if(argc == 1 || getopt(argv[1],"h") == TRUE )
  {
   show_help();
   exit(0);
  }
 else if(getopt(argv[1],"v") == TRUE)
  {
   printf("Version 1.0\n");
   exit(0);
  }
 else if(argc < 3)
  {
   show_help();
   exit(0);
  }

/*Ab argv[2] bis argv[n] alle Elemente in buffer*/
 strcpy(buffer,argv[2]);
 while(argv[counter]!=NULL)
 {
  strcat(buffer, " ");
  strcat(buffer, argv[counter++]);
 }

 if(getopt(argv[1],"r") == TRUE)
  spiegeln(buffer);
 else if(getopt(argv[1],"g") == TRUE)
  larger(buffer);
 else if(getopt(argv[1],"s") == TRUE)
  smaller(argv[2]);
 else
  show_help();
 return 0;
}


