#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define isletter(c) (((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z')))
#define isuppercase(c) (c>='A')&&(c<='Z')
#define islowercase(c) (c>='a')&&(c<='z')

int
main (int argc, char *argv[])
{
  int i;
  int base;
  int tmp;
  unsigned int lowercase_start='a';
  unsigned int lowercase_stop='z';
  unsigned int uppercase_start='A';
  unsigned int uppercase_stop='Z';

  char *truc = malloc(1000);
  char *truc2 = malloc(1000);
  
  if (((strncmp(argv[1],"-h",2)==0)) ||
      (strncmp(argv[1],"--help",6)==0))
    {
      printf("Usage: %s [(int) Rotation] T e x t e\n",argv[0]);
      exit(0);
    }
  
  if (argc-1 < 2 )
    {
      printf("Moins de 2 arguments => Kablam\n");
      printf("Regardez donc %s --help\n",argv[0]);
      exit(1);
    }
  
  base = atoi( argv[1] );
  
  for (i=2;i<argc;i++)
    {
      strcat (truc, argv[i]);
      strcat (truc, " ");
    }
  
  for (i=0;i<strlen(truc);i++)
    {
      if (isletter(truc[i]))
	{
	  if (islowercase(truc[i]))
	    {
	      if ((truc[i] + base) > lowercase_stop)
		{
		  tmp = ((lowercase_start-1) + ((truc[i] + base) - lowercase_stop));
		}
	      else
		{
		  tmp = truc[i] + base;
		}
	      truc2[i] = tmp;
	    }
	  else if (isuppercase(truc[i]))
	    {
	      if ((truc[i] + base) > uppercase_stop)
		{
		  tmp = ((uppercase_start-1) + ((truc[i] + base) - uppercase_stop));
		}
	      else
		{
		  tmp = truc[i] + base;
		}
	      truc2[i] = tmp;
	    }
	}
      else
	truc2[i] = truc[i];
    }
  //  fprintf (stdout, "Transformation par ROTATION de lettres\n");
  //  fprintf (stdout, "Par ed <ed@debian-fr.net> http://old.ed.zehome.com/ (c)2003 GPL.\n\n");
  fprintf (stdout, "%s\n",truc2);
  free (truc);
  free (truc2);

  return 0;
}