#include <stdio.h>
#include <string.h>

enum{OFF,SMALL,LARGE};
static int flag=OFF;
char String_arg[4096]="";
char schalter[5];
void spiegeln(char *);
void larger(char *);
void smaller(char *);

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");
}

void getopt(char *schalter)
{
 if(strcmp(schalter, "-r") == 0){
  flag=OFF;
  spiegeln(String_arg);
  }
 else if(strcmp(schalter, "-rg") == 0 || strcmp(schalter, "-gr") == 0){
  flag=LARGE;
  spiegeln(String_arg);
  }
 else if(strcmp(schalter, "-rs") == 0 || strcmp(schalter, "-sr") == 0){
  flag=SMALL;
  spiegeln(String_arg);
  }
 else if(strcmp(schalter, "-g") == 0){
  flag=LARGE;
  larger(String_arg);
  }
 else if(strcmp(schalter, "-s") == 0){
  flag=SMALL;
  smaller(String_arg);
  }
 else if(strcmp(schalter, "-h") == 0){
  flag=OFF;
  show_help();
  }
 else if(strcmp(schalter, "-v") == 0)
  printf("Version 1.1\n");
 else
  show_help();
}

void spiegeln(char *string)
{
 char *reverse=string;
 char temp[4096]="";
 while(*reverse++);
 if(flag==LARGE){
  while(*reverse--!= *string)
   strncat(temp,reverse,1);
  larger(temp);
  }
 else if(flag==SMALL){
  while(*reverse--!= *string)
   strncat(temp,reverse,1);
  smaller(temp);
  }
 else{
  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 i;
 /*Zuerst den Schalter suchen*/
 for(i=1; i<argc; i++)
  if(argv[i][0]=='-')
   strcpy(schalter,argv[i]);

 /*Jetzt die restlich Argumente einsammeln*/
 for(i=1; i<argc; i++)
  if(argv[i][0]!='-'){
   strcat(String_arg,argv[i]);
   strcat(String_arg," ");
   }

 getopt(schalter);

 printf("Schalter : %s\n",schalter);
 printf("String   : %s\n",String_arg);

 return 0;
}

